手动在本地电脑的docker容器中运行一个web应用 ``` sh # 下面的命令启动一个docker容器 docker run -d -t -p 8000:5000 --name demo ubuntu:18.04 # 这条命令的解释 -d 的意思是让容器在后台运行 -t 极少能用到,用于让一个空白的Ubuntu镜像在后台运行 -p 用于指定端口映射,表示在本机访问8000会被自动转到容器中5000端口 必须保证本机没有其余应用程序占用了8000端口,不然这里会失败 --name demo 制定了容器的名字是demo ubuntu:18.04 是启动容器时用的镜像名, docker会自动从镜像服务器去下载这个镜像 ```
# 启动一个端口为3456的进程 docker run -t -d -p 3456:5000 --name test ubuntu:18.04 # 报错1,端口被占用,删除test容器来不安比3456端口的占用 docker rm -f test # 报错2,名字已存在, 那么更名字, 也能够用上面的删除容器命令 docker run -t -d -p 3456:5000 --name test1 ubuntu:18.04
# 列出本机正在运行的容器 docker container ls # 列出本机全部容器,包括终止运行的容器 docker container ls --all # 查看正在运行的容器 docker ps # 查看最新指定数量的容器的状态 docker ps -n 10 # 终止容器 docker stop <container id>/<container name> # 对终止运行的容器重启, 容器id经过docker ps查询 docker start <container id>/<container name> # 查看容器日志 docker logs <container id>/<container name
启动容器之后,说明了运行了一个镜像实例,好比ubuntu:18.04镜像生成的test容器。这个容器目前有了ubuntu操做系统的文件管理功能,内存管理功能,进程调度等功能。如今还须要拥有python3, pip 环境, apt工具包。 ```sh docker run -d -t -p 8000:5000 --name unbuntu:18.04 # 下载apt工具包 docker exec demo apt update docker exec apt -y install python3 python3-pip # 安装flask库 docker exec demo pip3 install flask ```
上面说过,使用docker的目的就是软件应用带环境安装。如今环境好了,须要运行软件应用 ```sh # demo 容器中建立/code目录 docker exec demo mkdir /code # cp参数把当前文件夹的a.py拷贝到demo容器的/code/a.py docker cp a.py demo:/code/a.py # 运行demo容器中的a.py docker exec demo python3 /code/a.py ```
以前的一系列命令有些繁琐, 其实更好的方式是在宿主机写脚本,而后cp到docker容器中直接运行. 具体操做看实例操做
在当前目录下建立a.py文件python
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello from Docker' # 默认端口5000 if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
在当前目录下建立install.sh文件git
# install.sh apt update apt -y install python3 python3-pip pip3 install flask
在当前目录下建立run.sh文件github
# run.sh cd /code python3 a.py
打开终端,输入如下命令web
docker run -d -t -p 8000:5000 --name unbuntu:18.04 # demo 容器中建立/code目录 docker exec demo mkdir /code docker cp install.sh "demo:/code/install.sh" docker cp run.sh "demo:/code/run.sh" docker cp a.py "demo:/code/a.py" docker exec demo bash /code/install.sh docker exec demo bash /code/run.sh