在Docker官网https://docs.docker.com/get-started/看了一些文档,以下为文档大致摘要。
测试Kubernetes
在电脑上安装好 Docker Desktop后,点击设置,选择启用Kubernetes
新建一个文件,命名为 pod.yaml ,写入以下内容:
1 | apiVersion: v1 |
在命令行输入以下命令执行这个 yaml文件,创建你的 pod
1 | kubectl apply -f pod.yaml |
检查你的 pod 是否在运行
1 | kubectl get pods |
关闭运行中的 pod
1 | kubectl delete -f pod.yaml |
启用 Docker Swarm
初始化
1 | docker swarm init |
运行一个简单的Docker服务,用基于alpine的文件系统,同样也是 ping 一下 8.8.8.8
1 | docker service create --name demo alpine:3.5 ping 8.8.8.8 |
确认一下你的服务是否创造了一个正在运行的container:
1 | docker service ps demo |
确认你可以获取到相关的logs信息
1 | docker service logs demo |
最后,关闭测试服务
1 | docker service rm demo |
容器化一个应用
从GitHub的样例来建造一个image吧。
准备工作
1 | git clone -b v1 https://github.com/docker-training/node-bulletin-board |
Dockerfile 描述怎样为一个container编译一个私有文件系统,同时可以包含一些meta数据,这些meta数据描述如何运行一个基于此image的container。例如这个示例的Dockerfile的内容为:
1 | FROM node:6.11.5 |
编写一个 Dockerfile 是容器化一个应用的第一步。你可以一步步地猜测这些 Dockerfile 命令如何构建我们的image。例如上述的文件含义如下:
- 在现有的image (名字为 node:6.11.5)的基础上
- 使用 WORKDIR 指定所有的后续操作都在image文件系统的 /usr/src/app 下执行,即指定本image(在容器中)的工作目录
- 使用 COPY 指令将 package.json 文件从宿主复制到image的当前位置(.),在本例中,就是复制到image的 /usr/src/app/package.json
- 使用 RUN 指令在你的image文件系统中执行 npm install 命令,在本例,会读取 package.json 文件来安装你的应用的依赖;
- 使用 COPY 指令将你的应用的资源代码从宿主复制到image的文件系统
以上命令是用于构造我们的image的文件系统,CMD 指令在image中,指定一些meta数据描述如何基于此image运行一个container。在本例中,image容器化的过程是 npm install
构建和测试你的image
在 node-bulletin-board/bulletin-board-app 目录下,打开命令行,输入以下指令
1 | docker image build -t bolletinboard:1.0 . |
构建成功后,使用构建出来的image启动一个container,可以先查看当前宿主的image列表
1 | docker image ls |
然后找到刚构建出来的image id,在命令行运行:
1 | docker container run -p 8000:8080 --detach --name bb $IMAGE_ID |
在这里,我们用了一些flag,例如:
- -p告知docker宿主与container的端口映射关系,例如本例中,宿主的端口 8000 映射到 container的端口 8080
- –detach 要求Docker把此container在后台运行;
- –name 给运行起来的container起一个名字为 bb;
值得注意的是,我们并没有指定container要运行什么。由于我们在构建image的时候,在Dockerfile中使用了CMD指令,当container运行起来时,Docker自动执行 npm run 命令。
可以使用以下指令查看正在运行的container
1 | docker container ls |
进入容器内部
1 | docker exec -ti container_name /bin/bash |
如果你需要停止容器,可以使用指令
1 | docker container rm --force $CONTAINER_ID |
若需删除image,可以使用指令:
1 | docker image rm -f $IMAGE_ID |
配置仓库镜像
由于Docker的中央仓库位于国外,拉去image的时候,速度会比较慢,所以建议配置国内镜像
编辑 /etc/docker/daemon.json 文件(如果目录或文件不存在,则创建之)
添加一下内容:
1 | { |
然后重启docker,以CentOS 7为例
1 | systemctl stop docker |
创建Docker私有仓库
此处内容参考官网文档
在本地运行私有仓库
在创建Docker私有仓库前,请确保你的设备已经安装了docker并且在运行。
一个私有仓库,其实就是一个 registry 镜像的运行实例,在本地运行一个registry实例,并且绑定在5000端口上
1 | docker run -d -p 5000:5000 --restart=always --name registry registry:2 |
这样,本地的私有仓库就跑起来了。
把镜像推送到本地私有仓库
现在,我们罗列一下当前本地有哪些image:
1 | [root@node01 ~]# docker images |
当前本地有一个ubuntu:16.04的image,我们想它推送到本地私有仓库(本地和本地私有仓库是不同的!)
先把这个image起个新的名字吧:
1 | docker tag $CURRENT_NAME:CURRENT_VERSION $NEW_NAME:NEW_VERSION |
然后把这个image推送到本地私有仓库:
1 | docker push localhost:5000/my-ubuntu:16.04 |
这样,本地私有仓库就有这个 my-ubuntu:16.04 的image了。