- 容器数据卷
- tomcat 案例
- tomcat 案例
- 匿名挂载
- 具名挂载
- 指定路径挂载
- 初识DockerFile
- 简单例子
- 生成镜像
- 容器数据共享
- DockerFile
- 指令
- 查看镜像生成
- 案例:定制centos
- 案例:Tomcat
- 发布镜像
- Docker Hub
- 阿里云
tomcat 案例数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 数据卷默认会一直存在,即使容器被删除 Docker中提供了两种挂载方式,-v和-mount
docker run -di --name=mytomcat8 -v /home/test:/usr/local/tomcat/webapps --privileged=true -p 5000:8080 tomcat:8
查看容器元数据
docker inspect 7b34c306547a
# 挂载信息
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/usr/local/tomcat/webapps",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
访问5000端口发现页面404,进入容器拷贝文件
docker exec -it 容器ID /bin/bash cp -r webapps.dist/* webapps/
退出容器将会在宿主机只能查看挂载目录,已经发现容器内部操作的文件在这里是可以看见的,访问端口也正常查看
test# ls docs examples host-manager manager ROOT
tomcat 案例在宿主机操作文件,容器内同步
docker run -di --name=mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/vat/lib/mysql -p 5001:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
如何确定是具名挂载还是匿名挂载,还是指定路径挂戟!
匿名挂载-v容器内路径具名挂载
-v 卷名:容器内路径指定路径挂载
-v /宿主机路径::容器内路径初识DockerFile 简单例子
dockerfile01
FROM centos VOLUME ['volume01','volume02'] CMD echo "----end--" CMD /bin/bash生成镜像
docker build -f 文件路径及名称(当前路径可省略)-t 镜像名称:版本 .
注意: 结尾有一个点
示例
docker build -f dockerfile01 -t vincentvic/centos:1.0 . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest ---> 5d0da3dc9764 Step 2/4 : VOLUME ["volume01","volume02"] ---> Running in 8532d120ff5d Removing intermediate container 8532d120ff5d ---> 1a8bd91bef77 Step 3/4 : CMD echo "----end--" ---> Running in 643bfcdbdd44 Removing intermediate container 643bfcdbdd44 ---> 53f64da7fb38 Step 4/4 : CMD /bin/bash ---> Running in 7b7de411fa92 Removing intermediate container 7b7de411fa92 ---> f6438bf3f1fb Successfully built f6438bf3f1fb Successfully tagged vincentvic/centos:1.0
容器数据共享如果镜像从未下载则需要下载
–volumes-from
# 执行后保持后台运行退出 docker run --name docker01 -it vincentvic/centos:1.0 /bin/bash # 继承01挂载 docker run --name docker02 --volumes-from docker01 -it vincentvic/centos:1.0 /bin/bash # 进入volume01创建演示文件 [root@14214f89dd75 /]# cd volume01 [root@14214f89dd75 volume01]# touch 01.txt 进入docker01查看文件变化 docker exec -it docker01容器ID /bin/bash
数据通过双向拷贝的方式共享文件
多个Mysql 数据共享
docker run -di --name=mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/vat/lib/mysql -p 5001:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 docker run -di --name=mysql02 --volumes-from mysql01 -p 5002:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
DockerFile文中演示后会删除容器,不会存在同名
构建步骤:
- 编写一个dockerfile文件
- docker build构建成为一个镜像
- docker run运行镜像
- docker push发布镜像(DockerHub、阿里云镜像仓库!)
FROM #基础镜镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时侯需要运行的命令 ADD #步骤, tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOSE #保留端口配置 CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD #当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令。触发指令。 cOPY #类似ADD ,将我们文件持贝到镜像中 ENV #构建的时候设置环境变量查看镜像生成
docker history 镜像ID案例:定制centos
FROM centos:7 MAINTAINER Vincent-VicENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "---end---" CMD /bin/bash
构建
docker build -f dockerfile02 -t vincentvic/mycentos:1.0 .
测试
docker run -it vincentvic/mycentos:1.0 /bin/bash [root@ef78fa961423 local]# pwd /usr/local [root@ef78fa961423 local]# ifconfig eth0: flags=4163案例:Tomcatmtu 1500 inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet) RX packets 8 bytes 656 (656.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@ef78fa961423 local]# vim 1.txt
所需的依赖 : jdk-8xxx-linux-x64.tar.gz下载 | Tomcat 9
文件目录
apache-tomcat-9.0.63.tar.gz jdk-8u202-linux-x64.tar.gz readme.txt Dockerfile
Dockerfile
FROM centos MAINTAINER Vincent-VicCOPY readme.txt /usr/local/readme.txt ADD jdk-8u202-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.63.tar.gz /usr/local/ ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_202 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.63 ENV CATALINA_BASE $CATALINA_HOME ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD $CATALINA_HOME/bin/startup.sh && tail -F /home/tomcat/logs/catalina.out
ADD 添加时会完成解压操作
构建
docker build -t vincentvic/mytomcat9:1.0 . Sending build context to Docker daemon 222.2MB Step 1/14 : FROM centos ---> 5d0da3dc9764 Step 2/14 : MAINTAINER Vincent-Vic---> Using cache ---> 2fc8ad993983 Step 3/14 : COPY readme.txt /usr/local/readme.txt ---> Using cache ---> 4d87e68d5fd2 Step 4/14 : ADD jdk-8u202-linux-x64.tar.gz /usr/local/ ---> Using cache ---> 2b1f2447e26a Step 5/14 : ADD apache-tomcat-9.0.63.tar.gz /usr/local/ ---> Using cache ---> 0bad03ac0180 Step 6/14 : ENV MYPATH /usr/local ---> Using cache ---> fb9decc92b00 Step 7/14 : WORKDIR $MYPATH ---> Using cache ---> f0dc126e0d58 Step 8/14 : ENV JAVA_HOME /usr/local/jdk1.8.0_202 ---> Using cache ---> bdb7f28b02e7 Step 9/14 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Using cache ---> 0c3d450bce8d Step 10/14 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.63 ---> Using cache ---> 06c1e5429303 Step 11/14 : ENV CATALINA_BASE $CATALINA_HOME ---> Using cache ---> 6608e8c29f35 Step 12/14 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ---> Using cache ---> 461f9b2ce405 Step 13/14 : EXPOSE 8080 ---> Using cache ---> d24f5afff4a9 Step 14/14 : CMD $CATALINA_HOME/bin/startup.sh && tail -F /home/tomcat/logs/catalina.out ---> Using cache ---> 796a68e1cb4f Successfully built 796a68e1cb4f Successfully tagged vincentvic/mytomcat9:1.0
Dockerfile 为官方名字,构建时可以省略构建文件名
运行
docker run -d -p 5000:8080 --name mytomcat -v /home/test/tomcat:/usr/local/apache-tomcat-9.0.63/webapps/test -v /home/test/tomcatlogs:/home/tomcat/logs/ vincentvic/mytomcat9:1.0发布镜像 Docker Hub
- 地址https://hub.docker.coml注册账号
- 确定这个这账号可以登录
- 在我们服务器上提交自己的镜像
- 环境中登入
docker login --help
Usage: docker login [OPTIONS] [SERVER]
登录Docker注册。
如果未指定服务器,则默认值由守护程序定义。
Options:
-p, --password string 密码
--password-stdin 从stdin获取密码
-u, --username string 用户名
- 发布
docker push --help
Usage: docker push [OPTIONS] NAME[:TAG]
将图像或存储库推送到注册表
Options:
-a, --all-tags 推送存储库中的所有标记图像
--disable-content-trust 跳过图像签名(默认为true)
-q, --quiet 禁止详细输出
发布
docker push vincentvic/mytomcat9:latest
The push refers to repository [docker.io/vincentvic/mytomcat9]
An image does not exist locally with the tag: vincentvic/mytomcat9
[root@VM-8-13-centos ~]# docker push vincentvic/mytomcat9:1.0
The push refers to repository [docker.io/vincentvic/mytomcat9]
0139f2200496: Pushing [==================================================>] 16.6MB
dd7473c633b1: Pushing [=> ] 8.198MB/402.5MB
a9f397ad1933: Pushed
74ddd0ec08fa: Pushing [===============> ] 72.2MB/231.3MB
error parsing HTTP 408 response body: unexpected end of JSON input: ""
[root@VM-8-13-centos ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
docker version >= 1.12
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
Success.
You need to restart docker to take effect: sudo systemctl restart docker
[root@VM-8-13-centos ~]# docker push vincentvic/mytomcat9:1.0
The push refers to repository [docker.io/vincentvic/mytomcat9]
0139f2200496: Pushed
dd7473c633b1: Pushed
a9f397ad1933: Layer already exists
74ddd0ec08fa: Pushed
1.0: digest: sha256:309e1aee69a62626dff61af8fa5097b29927356e0dbd7046daed61a3e96af9b3 size: 1161
中途如果出现错误:error parsing HTTP 408 response body: unexpected end of JSON input: “”
配置加速器
阿里云curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
-
登录阿里云
-
找到容器镜像服务
-
创建命名空间
-
创建容器仓库
将镜像推送到Registry
$ docker login --username=flowboot registry.cn-hangzhou.aliyuncs.com $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/flowboot/flowboot:[镜像版本号] $ docker push registry.cn-hangzhou.aliyuncs.com/flowboot/flowboot:[镜像版本号]



