Docker
:Docker
?将程序和程序运行所依赖的所有环境都打包到镜像里。“build once, run anywhere”Docker
?是容器的一种实现。Windows 下如何安装Docker
:
一个Docker 镜像(image)包含了程序代码和程序运行所依赖的所有环境。 Docker 镜像一般存放在镜像仓库服务(Image Registry)里,默认的镜像仓库服务是Docker Hub。 用户可以制作、构建镜像、将镜像上传到镜像仓库服务,从而可以在其他地方从镜像仓库服务里拉取镜像。
例如,从Docker Hub拉取 helloworld 镜像的命令:
docker image pull library/hello-world
一个镜像的名字也叫镜像的仓库名,英文是REPOSITORY
,本地列举所有镜像的命令
docker image ls
一个镜像的配置信息可以通过下面的命令查看
docker image inspect hello-world
通过命令docker image rm
命令可以删除不用的镜像,例如先通过命令查看有哪些镜像。
docker image ls
截图如下,可以看到两个名字为<none>
的镜像:
如果镜像没有被启动过,直接之下下面的命令能删除成功:
docker image rm 09d01ed9156b
启动过我们可以批量使用Linux命令批量删除
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker image
一个Docker镜像(image)运行后,就是一个容器实例,称为container
以镜像hello-world
为例,启动容器:
docker container run -it hello-world
运行容器后可以通过参数指定执行的第一个程序,例如可以先拉取ubuntu
的容器镜像
docker image pull library/ubuntu
下载 ubuntu 镜像成功
接着,启动container 并执行第一个程序bin/bash
:
docker container run -it ubuntu bin/bash
可以看到成功进入了ubuntu容器实例的shell环境,并在shell环境里执行了ls
和ll
命令。
使用容器的id就可以杀死容器实例
docker container kill ******
下面的命令可以看到所有的 container 可选操作
docker container
如图所示:
在你自己的?gitcode.net?上创建一个仓库,命名为cloud_native_hello_py
,目录结构如下:
.
├── .dockerignore
├── .gitignore
├── Dockerfile
├── README.md
└── src
├── main.py
└── requirements.txt
上一题准备了代码仓库,并且配置了对应的 Dockerfile, 现在使用 docker 命令来制作镜像:
docker image build -t cloud_native_hello_py:0.0.1 ./
构建如图所示:
构建镜像之后,可以将镜像发布到 DockerHub ,不过需要首先注册下账号
现在,可以使用命令 tag 来修改镜像的标签为用户名/镜像名
格式:
docker tag cloud_native_hello_py:0.0.1 long/cloud_native_hello_py
可以用docker image ls
验证结果
现在,可以使用镜像的 push 命令来发布
docker push long/cloud_native_hello_py:latest
上一节创建了一个Python Flask 服务git仓库,然后为它配置了一个Dockerfile,最后构建了镜像并推送到Docker Hub。
现在,可以从 Docker Hub 拉取该镜像并运行。
首先,拉取镜像:
docker pull long/cloud_native_hello_py
其次,运行容器:
docker run -p 1024:1024 -it long/cloud_native_hello_py
这个命令没有指定容器启动后运行的命令,因此容器启动后会执行镜像制作时Dockerfile里指定的CMD命令,可以看到容器启动后执行了Python程序,容器服务在1024端口监听HTTP请求,因为 docker run 配置了参数-p 1024:1024
,这里把主机的1024端口映射到了容器里的1024端口。
现在,在浏览器里测试下请求:
请求成功,输出了"Hello World!",到这里你就成功学会了容器镜像制作、发布、拉取和运行一条龙服务。