栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Docker进阶(数据卷、DockerFile)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker进阶(数据卷、DockerFile)

Docker进阶【数据卷、DockerFile】
  • 容器数据卷
    • tomcat 案例
    • tomcat 案例
    • 匿名挂载
    • 具名挂载
    • 指定路径挂载
  • 初识DockerFile
    • 简单例子
    • 生成镜像
    • 容器数据共享
  • DockerFile
    • 指令
    • 查看镜像生成
      • 案例:定制centos
    • 案例:Tomcat
  • 发布镜像
    • Docker Hub
    • 阿里云

容器数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 数据卷默认会一直存在,即使容器被删除 Docker中提供了两种挂载方式,-v和-mount

tomcat 案例
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

构建步骤:

  1. 编写一个dockerfile文件
  2. docker build构建成为一个镜像
  3. docker run运行镜像
  4. 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-Vic

ENV 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  mtu 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
案例:Tomcat

所需的依赖 : 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-Vic

COPY 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
  1. 地址https://hub.docker.coml注册账号
  2. 确定这个这账号可以登录
  3. 在我们服务器上提交自己的镜像
  4. 环境中登入
docker login --help

Usage:  docker login [OPTIONS] [SERVER]

登录Docker注册。
如果未指定服务器,则默认值由守护程序定义。

Options:
  -p, --password string   密码
      --password-stdin    从stdin获取密码
  -u, --username string   用户名
  1. 发布
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

阿里云
  1. 登录阿里云

  2. 找到容器镜像服务

  3. 创建命名空间

  4. 创建容器仓库

    将镜像推送到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:[镜像版本号]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号