docker 进阶实战 - A Guide To Master Docker

我们继续上篇的讨论,没有看过 docker 实战攻略 的朋友可以先看它,下面,我们直接进入主题。

上篇,我讲到 docker 开机启动服务,类似我们的 linux 系统开机自启 nginx、mysql等,docker 一旦命令执行完毕就会退出,而启动的时候执行的命令是创建时传入的最后一个参数,如果不传入,默认是 docker 镜像的命令。

现在,我们启动 nginx ,先终端 查找 which nginx,我这边输出是 /usr/sbin/nginx,然后输入 nginx 并回车,浏览器打开 127.0.0.1 会打开默认的 nginx 页面。现在,修改 start.sh 让他先启动 nginx 然后启动 bash 做到即让 nginx 启动了也不至于命令执行完毕而退出了。修改后的 start.sh 如下:

/usr/sbin/nginx
/bin/bash

现在复制到 docker 里:docker cp start.sh nginx:/usr/local/bin/

然后重启下 nginx 这个容器,你会发现 nginx 启动了,如果你需要这个容器开机的时候启动其他软件,你都可以写到 start.sh 里面即可。

docker 开机自启、开机启动容器

docker 的开机自启很简单,sudo systemctl enable docker 即可,docker 容器开机自启可以先 sudo vim /etc/systemd/system/docker-container\@.service

接着写入如下内容:

[Unit]
Description=Docker Container %I
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a %i
ExecStop=/usr/bin/docker stop -t 2 %i

[Install]
WantedBy=default.target

如果你需要需要 nginx 容器开机自启,则执行 sudo systemctl enable docker-container\@nginx.service,但是这样自启动的 docker 无法通过 docker stop nginx 停止,停止后也会自动重启,你可以使用 systemctl stop docker-container\@nginx.service 来停止这个 docker,也可以将上面的 Restart=always 改为 Restart=no 或者直接删除,默认应该就是 no

现在,我们提交对这个 docker 的修改,最好先停止这个 docker ,不停止也 OK。

docker 保存修改,docker push 镜像

1、先 docker ps -a 拿到 nginx 容器的 container id,我的是 04916ef24e48 ,接着 commit

docker commit -m 'nginx container with custom command' -a 'ijustyce@163.com' 04916ef24e48 nginx:v1

2、使用 docker images 查看本地镜像,发现多了一个 nginx ,tag v1,并且有 image id,现在,我们 tag 这个镜像,tag 的作用是push的时候push到tag的这个url上

docker tag 167f882fdc9b registry.cn-hangzhou.aliyuncs.com/chun/nginx:v1

这里 167f882fdc9b 是镜像 id,通过 docker images 获取,最后,我们 push docker

3、docker push registry.cn-hangzhou.aliyuncs.com/chun/nginx:v1

关联 docker,node js 的 docker 连接 mysql 的 docker

关联 docker 比较简单,只需要 --link 就行,比如 docker run xxx --link mysql:mysql xxx 之后的程序里,连接 mysql 时,host 写 mysql 即可!

创建 docker 镜像

创建 docker 镜像一般有两种方式,最简单的方式是,自己先 pull 一个基本的镜像比如 debian, 然后创建一个容器,接着在这个容器里做你自己的修改,最后保存对这个容器的修改并push,这部分前面已经说了,很简单。另外,你还可以通过 dockerfile build 镜像,这又是另一个话题了,或者通过 docker-compose 来做也行。一般的,我不建议你使用 docker run --name 这种方式,尽量尝试用 docker compose 吧,我后期会补充 dockerfile 以及 docker-compose 方面的知识。如果你了解这两篇文章所介绍的 docker 知识,那么你使用 docker 基本没啥问题了,至于 dockerfile 以及 docker-compose 属于后期的东西了,掌握这两个以后,你可以考虑学习点 k8s 的知识了。

本博客若无特殊说明则由 full-stack-trip 原创发布
转载请点名出处:全栈之旅 > docker 进阶实战 - A Guide To Master Docker
本文地址:https://www.kpromise.top/a-guide-to-master-docker/

发表评论

电子邮件地址不会被公开。 必填项已用*标注