1.镜像发布步骤
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 镜像
4、docker push 镜像(发布镜像到DockerHub、阿里云镜像仓库)
Dockerfile命令简述
官方文档:Dockerfile reference | Docker Documentation
中文官方文档:Docker中文文档 Dockerfile介绍-DockerInfo
2.构建镜像
docker build -f dockerfile文件名 -t 镜像名[:版本号] 文件所在目录路径(若是当前路径则写 . )
run 起来之后我们可以使用 docker history 镜像id 查看镜像构建过程
RUN命令与CMD命令的区别在哪里?
简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个
Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
CMD和ENTRYPOINT的区别在哪里?
CMD :指定容器启动的时候要运行的命令,只有最后一个会生效,不可追加(会报错)
ENTRYPOINT :指定容器启动的时候要运行的命令,命令可以追加
#dockerfile的内容
FROM centos
CMD ["ls","-a"]
docker run 镜像名 -l(报错)
#dockerfile的内容
FROM centos
ENTRYPOINT ["ls","-a"]
docker run 镜像名 -l(不报错)
3.制作Tomcat镜像并发布镜像
在docker hub官网注册在虚拟机上完成登录
[root@localhost tomcat]# docker login -u returntmp
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
1.准备镜像文件tomcat、jdk压缩包
[root@localhost tomcat]# ll
total 188356
-rw-r--r--. 1 root root 10595340 Jun 9 05:43 apache-tomcat-8.5.81.tar.gz
-rw-r--r--. 1 root root 182278184 Apr 27 02:41 jdk-18_linux-x64_bin.tar.gz
-rw-r--r--. 1 root root 0 Jul 16 22:16 readme.txt
2.编写dockerfile文件,文件名使用官方命名:Dockerfile ,build的时候会默认寻找当前目录下的文件,不需要使用-f参数指定
[root@localhost tomcat]# cat Dockerfile
FROM centos
MAINTAINER returntmp(自己的用户名)<自己的邮箱名>
COPY readme.txt /usr/local/readme.txt
ADD jdk-18_linux-x64_bin.tar.gz /usr/local/
ADD apache-tomcat-8.5.81.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-18.0.1.1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.81
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.81
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.81/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.81/bin/logs/catalina.out
3.使用该Dockerfile构建镜像
[root@iZwz99sm8v95sckz8bd2c4Z tomcat]# docker build -t diytomcat:1.0 .
4.启动生成的镜像,构建Tomcat容器.
这里设置了数据卷,宿主机的/home/dockerfile/tomcat/test对应该容器的/usr/local/apache-
tomcat-8.5.81/webapps/test。这样关于test项目的修复只需要在宿主机上修改就可以了,不需要进入到容器中修改。
[root@localhost tomcat]# docker run -d -p 8088:8080 --name diytomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-8.5.81/webapps/test diytomcat:1.0
5.在/home/dockerfile/tomcat/test的目录下,新建index.html 测试Tomcat是否能正常使用。
因为设置了卷挂载所以可以直接在宿主机中进行操作。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>这是个标题</title>
</head>
<body>
<h1>这是一个一个简单的HTML</h1>
<p>Hello World!</p>
</body>
</html>
发布镜像到DockerHub
使用docker login -u 用户名 登陆后使用docker push
命令推送镜像到DockerHub上的仓库
[root@localhost test]# docker push returntmp/diytomcat:1.0
The push refers to repository [docker.io/returntmp/diytomcat]
An image does not exist locally with the tag: returntmp/diytomcat
[root@localhost test]# docker tag diytomcat:1.0 returntmp/diytomcat:1.0
[root@localhost test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
returntmp/diytomcat 1.0 45391717b538 19 minutes ago 564MB
diytomcat 1.0 45391717b538 19 minutes ago 564MB
my_centos01 1.0 f65ba7beac9e 2 days ago 312MB
my_centos 1.0 c69a44ca3dc3 2 days ago 231MB
tom 1.0 f6387f05c42f 6 days ago 684MB
mysql latest 7e7e458be53c 10 days ago 444MB
nginx latest 605c77e624dd 6 months ago 141MB
zookeeper latest 36c607e7b14d 6 months ago 278MB
tomcat latest fb5657adc892 6 months ago 680MB
hello-world latest feb5d9fea6a5 9 months ago 13.3kB
centos latest 5d0da3dc9764 10 months ago 231MB
kibana 7.6.2 f70986bc5191 2 years ago 1.01GB
elasticsearch 7.6.2 f29a1ee41030 2 years ago 791MB
java latest d23bdf5b1b1b 5 years ago 643MB
mobz/elasticsearch-head 5 b19a5c98e43b 5 years ago 824MB
[root@localhost test]# docker push returntmp/diytomcat:1.0
The push refers to repository [docker.io/returntmp/diytomcat]
12a3e34173f9: Pushed
0c61aa3985aa: Pushing 318.6MB
0c61aa3985aa: Pushed
74ddd0ec08fa: Mounted from library/centos
1.0: digest: sha256:42da521e47e94ade18c14e244adb1a3822a14013380b62bc3ca265ea9039451d size: 1161
因为push的时候,镜像名前面需要加上用户名(如果用户名不是当前登录用户则会拒绝push请求),所以需要使用命令docker tag 镜像名 新的镜像名
复制出一份镜像重新打个Tag。