本文章制作的镜像主要是在Docker Hub上拉取镜像,然后进行增加自身需要的软件等。最后上传到自己创建的Docker Hub仓库,最后再由其他机器进行下载验证。
从零开始制作镜像并上传至Docker Hub将会在后续文章中阐述。
这里以 MySQL
为例
一、从Docker Hub仓库拉取MySQL镜像
[root@7con] docker pull mysql:5.7.24
[root@7con] docker images
# 有如下显示就证明MySQL已经被成功拉取到本地了
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7.24 ae6b78bedf88 5 weeks ago 372 MB
二、将容器的3306端口映射到宿主机的3306端口
、配置文件
,日志文件
,数据目录
等都映射到宿主机上
[root@7con] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[root@7con] cd /data/mysql
[root@7con] 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
[root@7con] 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
[root@7con] netstat -antulp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 22689/docker-proxy-
# 可以看出,容器的3306端口已经映射到宿主机上了
三、进入容器,修改mysql配置文件
编者为了能够好的检验,后面拉取下来的镜像是否是自己上传的,所以在配置文件下增加 # By Scong
字样,如图:
[root@7con] docker exec -it d8a39e9be192 bash
root@d8a39e9be192:/# apt-get update
root@d8a39e9be192:/# apt-get install -y vim
root@d8a39e9be192:/# vim /etc/mysql/mysql.conf.d/mysqld.cnf
四、退出容器,将刚刚操作的镜像进行提交上传
[root@7con] 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标签
[root@7con] 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仓库
,没有的读者可以前往注册。上传成功如下图:
[root@7con] docker login # 登陆Docker Hub仓库
[root@7con] docker push skon2626/skon-hub:sc_mysql # 将镜像上传到自己的Docker Hub仓库
六、从自己的Docker Hub仓库拉取自己制作的镜像
[root@Scong] 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
七、步骤同 二、三
进行操作,检验效果如下图:
[root@Scong] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[root@Scong] cd /data/mysql
[root@Scong] 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
[root@Scong] 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
[root@Scong] netstat -antulp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 4723/docker-proxy
# 进入容器
[root@Scong] docker exec -it e3ce90149d32 bash
从图中我们可以看出,vim是可以直接使用的,如果不是自己制作的镜像,是会报-bash:vim :common not found
错误提示,而且也不会有文件末端的标识 # By Scong
。
所以,从简单的镜像修改制作,再上传到自己的Docker Hub仓库上,最后再pull拉取镜像测试验证
,一次完整的镜像修改制作就完成了。同理,如果想增加一些其他服务,按照文章步骤一样也是可以打包镜像。
如果想完全自主地制作镜像,那么在下一篇文章,将会阐述 利用Dockerfile完全自主地制作镜像
。
感谢阅读,本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!