Docker--Image and Container

Posted flgb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker--Image and Container相关的知识,希望对你有一定的参考价值。

2.1 深入探讨Image 
技术图片

 

说白了,image就是由一层一层的layer组成的。
2.1.1 官方image
https://github.com/docker-library
https://github.com/docker-library/tomcat/blob/master/8.5/jdk8/openjdk/Dockerfifile
2.1.2 Dockerfifile
不妨我们也来制作一个自己的image镜像,顺便学习一下Dockerfifile文件中常见语法
2.1.2.1 FROM
指定基础镜像,比如FROM ubuntu:14.04 
FROM ubuntu:14.04 
2.1.2.2 RUN
在镜像内部执行一些命令,比如安装软件,配置环境等,换行可以使用"" 
RUN groupadd -r mysql && useradd -r -g mysql mysql
2.1.2.3 ENV
设置变量的值,ENV MYSQL_MAJOR 5.7,可以通过docker run --e key=value修改,后面可以直接使
用${MYSQL_MAJOR}
ENV MYSQL_MAJOR 5.7
2.1.2.4 LABEL
设置镜像标签
LABEL email="itlf2019@163.com" 
LABEL name="itlf2019"
2.1.2.5 VOLUME
指定数据的挂在目录
OLUME /var/lib/mysql
2.1.2.5 COPY
将主机的文件复制到镜像内,如果目录不存在,会自动创建所需要的目录,注意只是复制,不会提取和
解压 
COPY docker-entrypoint.sh /usr/local/bin/
2.1.2.6 ADD
将主机的文件复制到镜像内,和COPY类似,只是ADD会对压缩文件提取和解压
ADD application.yml /etc/itcrazy2016/
2.1.2.7 WORKDIR
指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建
WORKDIR /usr/local 
WORKDIR tomcat 
RUN touch test.txt
会在/usr/local/tomcat下创建test.txt文件
WORKDIR /root 
ADD app.yml test/
会在/root/test下多出一个app.yml文件
2.1.2.8 CMD
容器启动的时候默认会执行的命令,若有多个CMD命令,则最后一个生效
CMD ["mysqld"] 或CMD mysqld
2.1.2.9 ENTRYPOINT
和CMD的使用类似
ENTRYPOINT ["docker-entrypoint.sh"]
和CMD的不同
docker run执行时,会覆盖CMD的命令,而ENTRYPOINT不会
2.1.2.10 EXPOSE
指定镜像要暴露的端口,启动镜像时,可以使用-p将该端口映射给宿主机
EXPOSE 3306 
 
2.1.3 Dockerfifile实战Spring Boot项目
(1)创建一个Spring Boot项目
(2)写一个controller 
(3)mvn clean package打成一个jar包 在target下找到"dockerfile-demo-0.0.1-SNAPSHOT.jar"
(4)在docker环境中新建一个目录"first-dockerfile" 
(5)上传"dockerfile-demo-0.0.1-SNAPSHOT.jar"到该目录下,并且在此目录创建Dockerfile (6)创建Dockerfile文件,编写内容 
FROM openjdk:8 MAINTAINElf2019" 
COPY spring-boot-images-0.0.1-SNAPSHOT.jar dockerfile-image.jar 
CMD ["java","-jar","dockerfile-image.jar"] 
(7)基于Dockerfile构建镜像 docker build -t test-docker-imag 8080:8080 test-docker-image 
(9)查看启动日志docker logs user01 
(10)宿主机上访问curl localhost:8080/dockerfile hello docker 或外部 http://192.168.1.104:8080/dockerfile
(11)还可以再次启动一个 docker run -d --name user02 -p 8081:8080 test-docker-image
docker stop user02
docker run -d --name user02 -p 8081:8080 test-docker-image 报错Conflict. The container name user02
docker rm fb087642b497(该containerID) 或者 docker restart user02(镜像名)
(12)docker ps 查看运行的容器 或 docker ps -as 查看所有存在的容器
(13)进如容器 docker exec -it test-docker-image sh

docker ps -as 查看所有存在的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
79cc86642500 test-docker-image "java -jar dockerfil…" 10 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp user 32.8kB (virtual 504MB)
4d9c41573d9a test-docker-image "java -jar dockerfil…" 38 minutes ago Created test-docker-image2 0B (virtual 504MB)
beac0c4f46a9 test-docker-image "java -jar dockerfil…" 42 minutes ago Up 42 minutes 0.0.0.0:6666->8080/tcp test-docker-image 32.8kB (virtual 504MB)
0f95d1856b08 tomcat "catalina.sh run" 2 hours ago Exited (143) 13 minutes ago mytomcat 57.5kB (virtual 507MB)
729964e122ad mysql:5.5 "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp mysql02 127B (virtual 205MB)
2e06bb215086 mysql "docker-entrypoint.s…" 3 hours ago Exited (0) 3 hours ago mysql01 0B (virtual 456MB)

 



以上是关于Docker--Image and Container的主要内容,如果未能解决你的问题,请参考以下文章

查询表中最新一期资产负债率 ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contain

如何在 jquery 的一个选择器中使用“start with”和“contain”选择器?

docker image 备份

如何将docker image 打包

如何更改docker image里面文件权限

alpine docker image 和 busybox docker image 有啥区别?