自己使用 python 项目提供的 http 服务。但 python 最大的问题就是版本不兼容,导致环境维护成本很高。 刚好这次依赖的开源库提供了 DockerFile,就尝试运行一下 Docker 容器,通过其使用的 python 镜像实现环境隔离。 记录一下过程中使用到的各个命令。
1# 1. 构建镜像2docker build . # 基于本地目录中的 DockerFile 构建镜像3
4docker build -t myImage:v1.0 # -t 用于指定 tag 名,可以通过 tag 名使用镜像5
6# 2. 使用镜像运行容器7docker run 6b4425c6fcb # 在前台使用 id 为 6b4425c6fcb 的镜像运行容器8
9docker run -d 6b4425c6fcb # 在后台使用 id 为 6b4425c6fcb 的镜像运行容器,-d: detached(分离模式)10
11docker run -d localhost/myImage:v1.0 # 在后台使用 tag 为 myImage:v1.0 的镜像运行容器12
13# 在后台使用 tag 为 myImage:v1.0 的镜像运行容器,且将宿主机端口映射到容器端口(格式:宿主机端口:容器端口)14# 如果没有映射端口,将导致无法访问到容器提供的 http 服务。容器端口由 DockerFile 中命令指定。15docker run -d -p 8080:8080 localhost/myImage:v1.019 collapsed lines
16
17# docker run 之后,将增加一条容器记录,镜像是模版,而容器是镜像的运行实例18# 3. 查看容器19docker ps # 可以看到 CONTAINER ID(容器ID)、IMAGE(对应镜像)、COMMAND(DockerFile 中的命令)、PORTS(绑定的端口信息)等等20docker ps -a # 列出所有容器(包括已经停止运行的)21
22# 4. 调试容器23# 在【已运行】的 CONTAINER ID 为 f2a65ed3c72 的容器中通过伪终端运行 bash(-i 支持标准输入,-t 分配伪终端)24docker exec -it f2a65ed3c72 bash # 通过 bash,可以运行各种命令以获取容器内部信息,判断是否正常提供服务,如 curl等25
26# 5. 停止容器27docker stop f2a65ed3c72 # 停止 CONTAINER ID 为 f2a65ed3c72 的容器28
29# 6. 删除容器30docker rm f2a65ed3c72 # 删除 CONTAINER ID 为 f2a65ed3c72 的容器31docker container prune # 删除已停止的容器32
33# 7. 删除镜像34docker rmi 6b4425c6fcb # 删除 ID 为 6b4425c6fcb 的镜像。如果使用该镜像的相关容器没有删除,会报错,可以通过 -f 强制删除(不建议)