文章目录
一、Docker镜像创建
1、基于已有镜像的创建
2、基于Dockerfile创建
Dockerfile 基本操作指令
创建tomcat镜像基于Dockerfile
[root@docker ~]# mkdir tomcat #创建工作目录
[root@docker ~]# cd tomcat/ #切换目录
[root@docker tomcat]# ls #上传jdk、tomcat进入此目录
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz
[root@docker tomcat]# vim Dockerfile #写Dokcerfile文件
FROM centos:7 #基于基础镜像
MAINTAINER this is tomcat image #用户信息
ADD jdk-8u91-linux-x64.tar.gz /usr/local/ #复制到指定目录并解压
WORKDIR /usr/local/ #指定工作目录
RUN mv jdk1.8.0_91 /usr/local/java #改名
ENV JAVA_HOME /usr/local/java #添加环境变量
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /usr/local/ #复制文件到指定目录并解压
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat #解压
WORKDIR /usr/local/tomcat/bin #指定工作目录
EXPOSE 8080 #暴露端口
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out #运行tomcat并查看日志(因为执行完主进程后,容器就会退出,所以运行一个主进程使其可以以守护进程的形式在后台运行)
[root@docker tomcat]# docker build -t tomcat:v1 . #创建镜像
Sending build context to Docker daemon 192.2MB
Step 1/14 : FROM centos:7
---> 8652b9f0cb4c
Step 2/14 : MAINTAINER this is tomcat image
---> Using cache
---> a5a93f5489ca
Step 3/14 : ADD jdk-8u91-linux-x64.tar.gz /usr/local/
---> 856a02ad3a0a
Step 4/14 : WORKDIR /usr/local/
---> Running in c53fe281c85f
Removing intermediate container c53fe281c85f
---> f378c1988032
Step 5/14 : RUN mv jdk1.8.0_91 /usr/local/java
---> Running in e550a8513dd2
Removing intermediate container e550a8513dd2
---> 4523b2a16397
Step 6/14 : ENV JAVA_HOME /usr/local/java
---> Running in 5180d88d69d2
Removing intermediate container 5180d88d69d2
---> 8abc7cfbe16b
Step 7/14 : ENV JRE_HOME ${JAVA_HOME}/jre
---> Running in 1e0978b1591f
Removing intermediate container 1e0978b1591f
---> 3c21de4a7b17
Step 8/14 : ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
---> Running in 556188b11373
Removing intermediate container 556188b11373
---> f93da06dd0ef
Step 9/14 : ENV PATH $JAVA_HOME/bin:$PATH
---> Running in f008f72645a3
Removing intermediate container f008f72645a3
---> e5ea1a21b34e
Step 10/14 : ADD apache-tomcat-9.0.16.tar.gz /usr/local/
---> 99e25ee313c0
Step 11/14 : RUN mv apache-tomcat-9.0.16 /usr/local/tomcat
---> Running in 5a8cb196278e
Removing intermediate container 5a8cb196278e
---> 76a55912613e
Step 12/14 : WORKDIR /usr/local/tomcat/bin
---> Running in 2ae1d5bd3793
Removing intermediate container 2ae1d5bd3793
---> a8274f536296
Step 13/14 : EXPOSE 8080
---> Running in 6db8f9af5871
Removing intermediate container 6db8f9af5871
---> 692364273b9f
Step 14/14 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
---> Running in 5102d276eea5
Removing intermediate container 5102d276eea5
---> 02882afef5dd
Successfully built 02882afef5dd
Successfully tagged tomcat:v1
查看宿主机访问浏览器查看
二、Docker的数据管理
1、数据卷
1.1 创建数据卷
[root@docker tomcat]# docker run -d -v /data1 --name tomcat3 tomcat:v1 #创建一个数据卷挂载到容器中
88fff1effffa244616ad1550f42e2380e9e300a1d32f48bb595bc7db1cb513cb
[root@docker tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88fff1effffa tomcat:v1 "/bin/sh -c '/usr/lo…" 7 seconds ago Up 6 seconds 8080/tcp tomcat3
671420fb32ae tomcat:v1 "/bin/sh -c '/usr/lo…" 46 minutes ago Up 4 minutes 0.0.0.0:49160->8080/tcp, :::49160->8080/tcp tomcat
[root@docker tomcat]# docker exec -it tomcat3 /bin/bash
[root@88fff1effffa /]# ls
anaconda-post.log bin data1 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@88fff1effffa /]#
1.2 挂载主机目录作为数据卷
[root@docker tomcat]# docker run -d -v /data1:/data1 --name tomcat4 tomcat:v1 #实现宿主机与容器之间的数据迁移
e743dd4dc55ec4121ca92da108ae63c4a555bd77b3f20dabbf3eab4c9472f637
[root@docker tomcat]# docker exec -it tomcat4 /bin/bash
[root@e743dd4dc55e /]# cd data1
[root@e743dd4dc55e data1]# touch 1
[root@e743dd4dc55e data1]# exit
exit
[root@docker tomcat]# ls /data1
1
2、数据卷容器
[root@docker tomcat]# docker run -d --volumes-from tomcat4 --name tomcat5 tomcat:v1
855e5b0f2591452b2cfaca6ef379e4b0efea995168d05411a7f85737b81d4d0a
[root@docker tomcat]# docker exec -it tomcat5 /bin/bash
[root@855e5b0f2591 /]# cd data1/
[root@855e5b0f2591 data1]# ls
1
[root@855e5b0f2591 data1]# touch 123456
[root@855e5b0f2591 data1]# exit
exit
[root@docker tomcat]# docker exec -it tomcat4 /bin/bash
[root@e743dd4dc55e /]# ls data1/
1 123456
[root@e743dd4dc55e /]# exit
exit
[root@docker tomcat]# ls /data1
1 123456
[root@docker tomcat]#
三、Docker网络信息
1、Docker网络模式
①Bridge:使用docker0作为网桥容器,桥接容器与宿主机网络
②Host:与宿主机共享网络名称空间/网络协议栈
③Container:多个容器之间共享一个网络名称空间/网络协议栈
④None:容器有独立的Network namespace,但是没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等(自闭空间)
2、Docker 自定义网络
2.1 查看网络列表
2.2 自定义网络固定IP
[root@docker tomcat]# docker network create --subnet=172.18.0.0/16 mynetwork
66c3c71a43371edc1da0d070ec52021975d7882c9f3d6c1e4d57a3576e5c6cce
[root@docker tomcat]# docker run -d --name tomcat1 --net mynetwork --ip 172.18.0.100 tomcat:v1
2b06a237f6f1ddf6ecdca8b1b27aeb1491793555ff00bc8c10f6460773378efa
[root@docker tomcat]# docker inspect tomcat1 | grep "IPA"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAMConfig": {
"IPAddress": "172.18.0.100",
2.3 端口映射
[root@docker tomcat]# docker run -d -P tomcat:v1
7cf69d0cadf9f92b8b1577365f91fb46f8446c4845967c7689de1b404210746a
[root@docker tomcat]# docker run -d -p 8080:8080 tomcat:v1
276010bd3bd3d47efc2a0917c58d163ae798316840ea3ea2863b268ce4f89cb2
[root@docker tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
276010bd3bd3 tomcat:v1 "/bin/sh -c '/usr/lo…" 5 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp competent_bartik
7cf69d0cadf9 tomcat:v1 "/bin/sh -c '/usr/lo…" About a minute ago Up About a minute 0.0.0.0:49161->8080/tcp, :::49161->8080/tcp pensive_lewin
2.4 容器互联
[root@docker tomcat]# docker run -d -P --name tomcat7 tomcat:v1 #创建源容器
1e1e7dfc8d855ddd0e84b7fdac8e9c794cc555905d38e3122e8e74627dab6a07
[root@docker tomcat]# docker run -d -P --name tomcat8 --link tomcat7:tomcat7 tomcat:v1 #创建接收容器
95f95a6b36bc5cb36ebba71a25dce517262fb3896a62d77862d85a805fa850c7
[root@docker tomcat]# docker exec -it tomcat7 /bin/bash
tomcat7
tomcat8