本文章制作的镜像主要是在 Docker Hub 上拉取镜像,然后进行增加自身需要的软件等。最后上传到自己创建的 Docker Hub 仓库,最后再由其他机器进行下载验证。
从零开始制作镜像并上传至 Docker Hub 将会在后续文章中阐述。
以 MySQL 为例
一、从 Docker Hub 仓库拉取 MySQL 镜像
[[email protected] ] docker pull mysql:5.7.24
[[email protected] ] docker images
# 有如下显示就证明 MySQL 已经被成功拉取到本地了
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7.24 ae6b78bedf88 5 weeks ago 372 MB
二、将容器的 3306 端口映射到宿主机的 3306 端口 、配置文件,日志文件,数据目录 等都映射到宿主机上
[[email protected] ] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[[email protected] ] cd /data/mysql
[[email protected] ] docker run -p 3306:3306 --name sc_mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs/:logs -v $PWD/data/:/mysql -e MYSQL_ROOT_PASSWORD="abc123" -itd f991c20cb508
[[email protected] ] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8a39e9be192 ae6b78bedf88 "docker-entrypoint..." 14 minutes ago Up 14 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp sc_mysql
可以看出,容器的 3306 端口已经映射到宿主机上了
[[email protected] ] netstat -antulp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 22689/docker-proxy-
三、进入容器,修改 mysql 配置文件
编者为了能够好的检验,后面拉取下来的镜像是否是自己上传的,所以在配置文件下增加 By Scong
字样,如图:
[[email protected] ] docker exec -it d8a39e9be192 bash
[email protected]:/# apt-get update
[email protected]:/# apt-get install -y vim
[email protected]:/# vim /etc/mysql/mysql.conf.d/mysqld.cnf
四、退出容器,将刚刚操作的镜像进行提交上传
[[email protected] ] docker commit -m="have changes" -a="skon" d8a39e9be192 skon2626/skon-hub:sc_mysql
# -m:提交修改的信息
# -a:维护人的信息
# 紧接着的是之前的容器ID
# skon/skon-hub:Docker Hub仓库,如果没有,默认为Docker的Docker Hub仓库
# sc_mysql:tag标签
查看生成的镜像
[[email protected] ] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
skon2626/skon-hub sc_mysql 77cf957eee86 2 hours ago 419 MB
docker.io/mysql 5.7.24 ae6b78bedf88 5 weeks ago 372 MB
五、将创建的镜像上传到 自己的 Docker Hub 仓库,没有的读者可以前往注册。上传成功如下图:
[[email protected] ] docker login # 登陆Docker Hub仓库
[[email protected] ] docker push skon2626/skon-hub:sc_mysql # 将镜像上传到自己的Docker Hub仓库
六、从自己的 Docker Hub 仓库拉取自己制作的镜像
[[email protected] ] docker pull skon2626/skon-hub:sc_mysql
sc_mysql: Pulling from skon2626/skon-hub
a5a6f2f73cd8: Pull complete
936836019e67: Pull complete
283fa4c95fb4: Pull complete
1f212fb371f9: Pull complete
e2ae0d063e89: Pull complete
5ed0ae805b65: Pull complete
0283dc49ef4e: Pull complete
a7905d9fbbea: Pull complete
cd2a65837235: Pull complete
5f906b8da5fe: Pull complete
e81e51815567: Pull complete
e22f3dba163f: Pull complete
Digest: sha256:d75751ec13685b8c3ea18a92ebf8e8e1931e23c6f67d14e6825af214ad67f2f8
Status: Downloaded newer image for skon2626/skon-hub:sc_mysql
七、步骤同 二、三进行操作,检验效果如下图:
[[email protected] ] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[[email protected] ] cd /data/mysql
[[email protected] ] docker run -p 3306:3306 --name sc_mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs/:logs -v $PWD/data/:/mysql -e MYSQL_ROOT_PASSWORD="abc123" -itd 77cf957eee86
[[email protected] ] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3ce90149d32 77cf957eee86 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp sc_mysql
下载自身制作的镜像,并启动 mysql:
[[email protected] ] netstat -antulp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 4723/docker-proxy
进入容器
[[email protected]ichung ] docker exec -it e3ce90149d32 bash
从图中我们可以看出,vim 是可以直接使用的,如果不是自己制作的镜像,是会报-bash:vim :common not found
错误提示,而且也不会有文件末端的标识 # By Scong
。
所以,从简单的镜像修改制作,再上传到自己的 Docker Hub 仓库上,最后再 pull 拉取镜像测试验证,一次完整的镜像修改制作就完成了。同理,如果想增加一些其他服务,按照文章步骤一样也是可以打包镜像。
如果想完全自主地制作镜像,那么在下一篇文章,将会阐述利用Dockerfile完全自主地制作镜像