docker总结
容器
- 把需要启动的进程,以及进程所依赖的环境(库文件)封装在一起,运行到容器中。
容器技术
- 容器比虚拟机更轻量级,占有的资源比虚拟机更少。(容器没有操作系统)
- 实现应用和部署的敏捷性。(容器秒级启动)
- 为了符合当下和未来开发的架构理念(微服务架构)。
- 一次编译可以在所有环境运行。
docker
Docker 的核心组件包括: Docker 客户端:Client Docker 服务器:Docker daemon Docker 镜像:Image Registry:镜像仓库 Docker 容器:Container
- (Docker从1.13.x版本开始,版本分为企业版EE和社区版CE)
- Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 Docker daemon是服务器组件,以Linux后台服务的方式运行,Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。
- Registry Harbor镜像仓库
docker镜像
docker commit
Dockerfile
- FROM (构建指令) 指定基础image为该image的最后修改的版本(latest)。 或者: FROM : 镜像仓库:192.168.70.105:5000/ubuntu:v1
- MAINTAINER (构建指令)
格式:MAINTAINER
设置镜像的作者,可以是任意字符串。 - COPY (构建指令)
- ADD (构建指令)
- ENV (构建指令) 设置环境变量,环境变量可被后面的指令使用,并在容器运行时保持。
- l ARG 构建参数
格式: ARG <参数名>[=<默认值>] - ARG构建参数和 ENV 的效果一样,都是设置变量。所不同的是, ARG 所设置的构建环境的变量,在将来容器运行时是不会存在这些变量的。
- EXPOSE (设置指令)
- VOLUME (设置指令)
- WORKDIR (设置指令)
格式:WORKDIR /path/to/workdir - RUN (构建指令) 在构建镜像过程中要指定执行的命令。
- CMD (设置指令) 容器启动时运行指定的命令。
- ENTRYPOINT (设置指令)
设置容器启动时运行的命令。
- USER
- HEALTHCHECK 容器健康状况检查命令
- l LABEL
给镜像添加信息。使用docker inspect可查看镜像的相关信息
docker 部署centos+tomcat
//构建centom+tomcat镜像
[root@docker01 ~]# mkdir tomcat
[root@docker01 ~]# cd tomcat/
[root@docker01 tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7.5_ssh_apache2.4_supervisord latest a82dadb57dea 45 hours ago 698MB
nginx latest f9c14fe76d50 6 days ago 143MB
httpd latest d1676199e605 8 days ago 145MB
busybox latest 8135583d97fe 11 days ago 4.86MB
centos centos7.9.2009 eeb6ee3f44bd 20 months ago 204MB
[root@docker01 tomcat]# vi dockerfile
[root@docker01 tomcat]# cat dockerfile
FROM centos:centos7.9.2009
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH $JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
RUN export PATH JAVA_HOME CLASSPATH
ADD apache-tomcat-8.5.42.tar.gz /usr/local/
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.42/bin/catalina.sh run
[root@docker01 ~]# ls
anaconda-ks.cfg flannel-v0.10.0-linux-amd64.tar.gz ngx_cache_purge-2.3.tar.gz
apache-tomcat-8.5.42.tar.gz hostfile README.md
etcd-v3.3.11-linux-amd64.tar.gz jdk-8u171-linux-x64.tar.gz tomcat
flanneld mk-docker-opts.sh
[root@docker01 ~]# mv apache-tomcat-8.5.42.tar.gz jdk-8u171-linux-x64.tar.gz tomcat/
[root@docker01 ~]# cd tomcat/
[root@docker01 tomcat]# ls
apache-tomcat-8.5.42.tar.gz dockerfile jdk-8u171-linux-x64.tar.gz
[root@docker01 tomcat]# docker build -t centos_tomcat:8.5.42 .
[root@docker01 tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_tomcat 8.5.42 07afb0d33884 About a minute ago 605MB
centos7.5_ssh_apache2.4_supervisord latest a82dadb57dea 45 hours ago 698MB
nginx latest f9c14fe76d50 6 days ago 143MB
httpd latest d1676199e605 8 days ago 145MB
busybox latest 8135583d97fe 11 days ago 4.86MB
centos centos7.9.2009 eeb6ee3f44bd 20 months ago 204MB
[root@docker01 tomcat]# docker history centos_tomcat:8.5.42
IMAGE CREATED CREATED BY SIZE COMMENT
07afb0d33884 About a minute ago CMD ["catalina" "run"] 0B buildkit.dockerfile.v0
<missing> About a minute ago EXPOSE map[8080/tcp:{}] 0B buildkit.dockerfile.v0
<missing> About a minute ago ADD apache-tomcat-8.5.42.tar.gz /usr/local/ … 13.9MB buildkit.dockerfile.v0
<missing> About a minute ago RUN /bin/sh -c export PATH JAVA_HOME CLASSPA… 0B buildkit.dockerfile.v0
<missing> About a minute agENV CLASSPATH=/usr/local/jdk1.8.0_171/jre/li… 0B buildkit.dockerfile.v0
<missing> About a minute ago ENV PATH=/usr/local/jdk1.8.0_171/bin:/usr/lo… 0B buildkit.dockerfile.v0
<missing> About a minute ago ENV JAVA_HOME=/usr/local/jdk1.8.0_171 0B buildkit.dockerfile.v0
<missing> About a minute ago ADD jdk-8u171-linux-x64.tar.gz /usr/local/ #… 387MB buildkit.dockerfile.v0
<missing> 20 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 20 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 20 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB
//运行容器
[root@docker01 tomcat]# docker run -it --rm centos_tomcat:8.5.42
Using CATALINA_BASE: /usr/local/apache-tomcat-8.5.42
Using CATALINA_HOME: /usr/local/apache-tomcat-8.5.42
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.42/temp
[root@docker01 tomcat]# docker run -d --name tomcat_web01 --restart always -p 8080:8080 centos_tomcat:8.5.42
f30131c77dc3e78baec2889d6f59e36cd87afe786b3c849e0634d18c0aed13b8
[root@docker01 tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f30131c77dc3 centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 12 seconds ago Up 11 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat_web01
[root@docker01 tomcat]# curl 192.168.70.106:8080
//进入容器
[root@docker01 tomcat]# docker attach tomcat_web01
[root@docker01 tomcat]# docker ps //catalina.sh 被停掉,所以没有运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker01 tomcat]# docker start tomcat_web01
tomcat_web01
[root@docker01 tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f30131c77dc3 centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 7 minutes ago Up 11 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat_web01
[root@docker01 tomcat]# docker logs tomcat_web01 //查看启动时终端输出信息
# docker exec //进入容器执行命令
挂载卷
//bind mount
[root@docker01 ~]# mkdir /usr/local/tomcat
[root@docker01 ~]# cat tomcat/dockerfile
FROM centos:centos7.9.2009
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH $JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
RUN export PATH JAVA_HOME CLASSPATH
ADD apache-tomcat-8.5.42.tar.gz /usr/local/
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.42/bin/catalina.sh run
[root@docker01 ~]# docker run -d --name tomcat_web01 --restart always -p 8080:8080 -v /usr/local/tomcat/:/usr/local/apache-tomcat-8.5.42 centos_tomcat:8 .5.42
docker: Error response from daemon: Conflict. The container name "/tomcat_web01" is already in use by container "f30131c77dc3e78baec2889d6f59e36cd87afe7 86b3c849e0634d18c0aed13b8". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
[root@docker01 ~]# docker run -d --name tomcat_web02 --restart always -p 8081:8080 -v /usr/local/tomcat/:/usr/local/apache-tomcat-8.5.42 centos_tomcat:8 .5.42
fb1da3b9952bd57b9140e77c104eae151ae5b5d164d91ad3ae0ddd3dc3a0e424
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb1da3b9952b centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 20 seconds ago Restarting (127) 5 seconds ago tomcat_web02
[root@docker01 ~]# docker rm -f tomcat_web02
tomcat_web02
[root@docker01 ~]# ls
anaconda-ks.cfg etcd-v3.3.11-linux-amd64.tar.gz flannel-v0.10.0-linux-amd64.tar.gz mk-docker-opts.sh README.md
apache-tomcat-8.5.42.tar.gz flanneld hostfile ngx_cache_purge-2.3.tar.gz tomcat
[root@docker01 ~]# ls /usr/local/tomcat
[root@docker01 ~]# tar zxf apache-tomcat-8.5.42.tar.gz -C /usr/local/
[root@docker01 ~]# cd /usr/local/
[root@docker01 local]# ls
apache-tomcat-8.5.42 bin etc games include lib lib64 libexec sbin share src tomcat
[root@docker01 ~]# docker run -d --name tomcat_web05 --restart always -p 8085:8080 -v /usr/local/tomcat/apache-tomcat-8.5.42:/usr/local/apache-tomcat-8.5.42 centos_tomcat:8.5.42
938a0c79b79258f5674f5f3fae2b2f3c3936bf85e7cfac850d285f44572910f6
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
938a0c79b792 centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 7 seconds ago Up 6 seconds 0.0.0.0:8085->8080/tcp, :::8085->8080/tcp tomcat_web05
//docker volume
[root@docker01 ~]# docker volume create tomcat_data
tomcat_data
[root@docker01 ~]# ls /var/lib/docker/volumes/tomcat_data/
_data
[root@docker01 ~]# ls /var/lib/docker/volumes/tomcat_data/_data/
[root@docker01 ~]# docker volume inspect tomcat_data
[
{
"CreatedAt": "2023-06-01T18:29:19+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/tomcat_data/_data",
"Name": "tomcat_data",
"Options": null,
"Scope": "local"
}
]
[root@docker01 ~]# docker run -d --name tomcat_web02 --restart always -p 8081:8080 -v tomcat_data:/usr/local/apache-tomcat-8.5.42 centos_tomcat:8.5.42 de3be22271e43d302f1a2036b0f61f9b9589d43583eb6958b847b4cc8ca6c711
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de3be22271e4 centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 10 seconds ago Up 9 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp tomcat_web02
f30131c77dc3 centos_tomcat:8.5.42 "/bin/sh -c '/usr/lo…" 20 hours ago Up 2 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat_web01
[root@docker01 ~]# ls /var/lib/docker/volumes/tomcat_data/_data/
bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work
docker 网络
- single-host 单宿主机的网络
- multi-host 多宿主机的网络(原生网络)
- multi-host 第三方的网络
- joined container 后创建的容器网络共用之前创建容器的网络