Docker精华 ,超全文档!-程序员宅基地

技术标签: java  linux  大数据  centos  docker  

我们的口号是:人生不设限!!   


学习规划:继续上篇 《Docker入门》https://www.cnblogs.com/dk1024/p/13121389.html 

继续讲解:

 

一、容器数据卷

1、什么是容器数据卷:Docker是将应用和环境打包成一个镜像,发布到服务器,这个跑起来的容器如果不小心删除掉,呢么数据就会全部丢失,尤其是Mysql之类的容器,name现在就有一个需求,数据持久化到本地,这就是卷技术,即:目录的挂载,将我们的容器内的目录挂载到Linux某个目录下,说白了就是一种同步的机制,就是容器的持久化和同步操作,而且容器之间也是可以共享数据的。

 2、体验卷技术

实战:直接使用命令挂载  -v

#目的:启动centos,把容器内 /home 挂载到 /home/ceshi 下

#检查Linux /home目录下是否干净

[root@ldk ~]# cd /home/
[root@ldk home]#

[root@ldk home]# ls


#启动centos 容器

[root@ldk /]# docker run -it -v /home/ceshi:/home centos /bin/bash

#进入 容器 查看/home目录

[root@2ce40ff3194b /]# cd /home/
[root@2ce40ff3194b home]# ls
[root@2ce40ff3194b home]#

#查看 宿主机目录 /home目录  发现多了个  ceshi文件夹

[root@ldk ~]# cd /home/
[root@ldk home]# ls
 ceshi
[root@ldk home]#

#在 宿主机,确认卷是否挂载成功了

[root@ldk home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ce40ff3194b centos "/bin/bash" 4 minutes ago Up 4 minutes boring_swanson
[root@ldk home]# docker inspect 2ce40ff3194b
[
{
"Id": "2ce40ff3194b192421024cf4b56606c6dfe3b49c504f41698f0b7ec38e49b71c",
"Created": "2020-06-20T06:05:30.539438785Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 6971,

...

"Mounts": [
{
"Type": "bind","Source": "/home/ceshi",   #宿主机地址 "Destination": "/home",    #docker容器内地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],

...

#测试挂载效果(在 宿主机 /home/ceshi 下新增ldk.java  检查是否可以映射到 容器 内的/home 目录下)

#宿主机

[root@ldk home]# cd ceshi
[root@ldk ceshi]# ll
total 0
[root@ldk ceshi]# touch ldk.java
[root@ldk ceshi]# ll
total 0
-rw-r--r-- 1 root root 0 Jun 20 14:17 ldk.java
[root@ldk ceshi]#

#容器内

[root@2ce40ff3194b /]# cd /home/
[root@2ce40ff3194b home]# ls
ldk.java     
[root@2ce40ff3194b home]#

#查看发现,同步成功! 同理,停止容器,修改 宿主机的ldk.java 文件,再重启容器,查看容器内的ldk.java,同样是可以同步成功的。只要容器存在,就可以同步成功。注:删除容器,宿主机的挂载目录还是存在的。这也间接说明,两份文件占用了两份存储。

实战:Mysql 同步数据

#获取mysql镜像

[root@ldk /]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 8559a31e96f4: Already exists d51ce1c2e575: Already exists c2344adc4858: Already exists fcf3ceff18fc: Already exists 16da0c38dc5b: Already exists b905d1797e97: Already exists 4b50d1c6b05c: Already exists c75914a65ca2: Pull complete 1ae8042bdd09: Pull complete 453ac13c00a3: Pull complete 9e680cd72f08: Pull complete a6b5dc864b6c: Pull complete Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest

#启动mysql
-d 后台运行
-p 端口映射
-v 卷挂载 这边我们挂载两个目录
-e mysql密码
--name 容器名字 [root@ldk /]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 8126f9c18eecb4581a33c1bbab4b5b829617d25104ed7b9004fe751055a9606a [root@ldk /]#

#启动并且挂载成功,按照centos容器挂载规则,查看是否挂载

二、具名挂载和匿名挂载

#匿名挂载  Nginx, 只指定容器内路径,不指定容器外路径

[root@ldk ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx 9aef70a2a4a5e91687d639dc65635968c8d86e0c456be4eff9665ce2870ced94

#查看所有挂载情况 [root@ldk ~]# docker volume ls DRIVER VOLUME NAME local 9b560fb95ed9e801600ee4fc84d8566575185ff04eec984bd8b2a4bcff9459f1 local 12c2c93d2d80e10ea8545ff78fc7e3fa2eb03400bcc5a7bf475b36d64ec6f48a local 78f7f7c39370425190946b0a29288043e2999e9f0c18078b045c89895bd57264 [root@ldk ~]#

#具名挂载 格式:-v 卷名:容器内目录(大多数情况都是具名方式)

[root@ldk ~]# docker run -d -P --name nginx02 -v jumign-nginx:/etc/nginx nginx
709e5d31a7adfc79fa491edabfec81048a04be3df22dcbb6edf419bfd16de5fd
[root@ldk ~]# docker volume ls
DRIVER VOLUME NAME
local 9b560fb95ed9e801600ee4fc84d8566575185ff04eec984bd8b2a4bcff9459f1
local 12c2c93d2d80e10ea8545ff78fc7e3fa2eb03400bcc5a7bf475b36d64ec6f48a
local 78f7f7c39370425190946b0a29288043e2999e9f0c18078b045c89895bd57264
local jumign-nginx
[root@ldk ~]#

#查看inspect,所有的卷都挂载在:/var/lib/docker/volumes  下

[root@ldk ~]# docker volume inspect jumign-nginx
[
{
"CreatedAt": "2020-06-20T16:53:27+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/jumign-nginx/_data",
"Name": "jumign-nginx",
"Options": null,
"Scope": "local"
}
]
[root@ldk ~]#

#进入宿主机,验证卷的挂载情况

[root@ldk ~]# cd /var/lib/docker/volumes
[root@ldk volumes]# ll
total 40
drwxr-xr-x 3 root root 4096 Jun 20 16:48 12c2c93d2d80e10ea8545ff78fc7e3fa2eb03400bcc5a7bf475b36d64ec6f48a
drwxr-xr-x 3 root root 4096 Jun 20 16:36 78f7f7c39370425190946b0a29288043e2999e9f0c18078b045c89895bd57264
drwxr-xr-x 3 root root 4096 Jun 20 16:36 9b560fb95ed9e801600ee4fc84d8566575185ff04eec984bd8b2a4bcff9459f1
drwxr-xr-x 3 root root 4096 Jun 20 16:53 jumign-nginx
-rw------- 1 root root 32768 Jun 20 16:53 metadata.db
[root@ldk volumes]#

#继续深入查看jumign-nginx 挂载情况,看到了想要的nginx.conf配置文件

[root@ldk volumes]# cd jumign-nginx/_data/
[root@ldk _data]# ll
total 40
drwxr-xr-x 2 root root 4096 Jun 20 16:53 conf.d
-rw-r--r-- 1 root root 1007 May 26 23:00 fastcgi_params
-rw-r--r-- 1 root root 2837 May 26 23:00 koi-utf
-rw-r--r-- 1 root root 2223 May 26 23:00 koi-win
-rw-r--r-- 1 root root 5231 May 26 23:00 mime.types
lrwxrwxrwx 1 root root 22 May 26 23:01 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 643 May 26 23:01 nginx.conf
-rw-r--r-- 1 root root 636 May 26 23:00 scgi_params
-rw-r--r-- 1 root root 664 May 26 23:00 uwsgi_params
-rw-r--r-- 1 root root 3610 May 26 23:00 win-utf
[root@ldk _data]#

#拓展:
ro readonly 只读:设置之后,只能通过容器外部进行改写,容器内不禁止操作,且权限不可修改
rw readwrite 可读可写,容器内外均可读写


docker run -d -P --name nginx02 -v jumign-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v jumign-nginx:/etc/nginx:rw nginx
 

三、数据卷之Dockerfile

  初识Dockerfile:之前我们使用commit命令生成过镜像,我们也可以使用Dockerfile构建镜像,说白了,Dockerfile就是Docker镜像的构建文件,就是一段命令脚本!

 小试一把:

#在宿主机 /home/docker-test-volume/ 下新建一个dockerfile1的文件
[root@ldk /]# cd /home/
[root@ldk home]# mkdir docker-test-volume
[root@ldk home]# cd docker-test-volume/
[root@ldk docker-test-volume]# ll
total 0
[root@ldk docker-test-volume]# vim dockerfile1

#编写脚本(开头大写,分层构建):

FROM centos


VOLUME ["volume01","volume02"]


CMD echo "------build end------"


CMD /bin/bash

#脚本解释:准备一个基础的centos镜像;
      设置具名挂载目录为volum01和volume02,创建的时候就挂载 ;
      构建完打印:------build end------;
      默认bash控制台;

#执行脚本

[root@ldk docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t ldk/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 470671670cac
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 771370c6dfef
Removing intermediate container 771370c6dfef
---> 1941426d1d91
Step 3/4 : CMD echo "------build end------"
---> Running in 070cbd782e00
Removing intermediate container 070cbd782e00
---> c947d804f177
Step 4/4 : CMD /bin/bash
---> Running in 817099ec4089
Removing intermediate container 817099ec4089
---> 49a84ce17460
Successfully built 49a84ce17460
Successfully tagged ldk/centos:1.0

#创建镜像成功

[root@ldk docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZEldk/centos 1.0 49a84ce17460 6 minutes ago 237MB
tomcat latest 2eb5a120304e 10 days ago 647MB
nginx latest 2622e6cca7eb 10 days ago 132MB
mysql 5.7 9cfcce23593a 11 days ago 448MB
mysql latest be0dbf01a0f3 11 days ago 541MB
centos latest 470671670cac 5 months ago 237MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
[root@ldk docker-test-volume]#

#启动自己构建的容器

[root@ldk /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ldk/centos 1.0 49a84ce17460 8 minutes ago 237MB
tomcat latest 2eb5a120304e 10 days ago 647MB
nginx latest 2622e6cca7eb 10 days ago 132MB
mysql 5.7 9cfcce23593a 11 days ago 448MB
mysql latest be0dbf01a0f3 11 days ago 541MB
centos latest 470671670cac 5 months ago 237MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
[root@ldk /]# docker run -it 49a84ce17460 /bin/bash
[root@7b0a9902dbeb /]# ls -l
total 56
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 360 Jun 20 09:44 dev
drwxr-xr-x 1 root root 4096 Jun 20 09:44 etc
drwxr-xr-x 2 root root 4096 May 11 2019 home
lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64
drwx------ 2 root root 4096 Jan 13 21:48 lost+found
drwxr-xr-x 2 root root 4096 May 11 2019 media
drwxr-xr-x 2 root root 4096 May 11 2019 mnt
drwxr-xr-x 2 root root 4096 May 11 2019 opt
dr-xr-xr-x 95 root root 0 Jun 20 09:44 proc
dr-xr-x--- 2 root root 4096 Jan 13 21:49 root
drwxr-xr-x 11 root root 4096 Jan 13 21:49 run
lrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 May 11 2019 srv
dr-xr-xr-x 13 root root 0 Jun 20 09:31 sys
drwxrwxrwt 7 root root 4096 Jan 13 21:49 tmp
drwxr-xr-x 12 root root 4096 Jan 13 21:49 usr
drwxr-xr-x 20 root root 4096 Jan 13 21:49 var
drwxr-xr-x 2 root root 4096 Jun 20 09:44 volume01   //这两个就是我们自动挂载的数据卷目录
drwxr-xr-x 2 root root 4096 Jun 20 09:44 volume02
[root@7b0a9902dbeb /]#

#验证是否挂载成功(在容器内部新建一个 av.txt文件,去宿主机寻找被同步的av.txt)

#进入容器内的挂载目录 /volum01,新建文件 av.txt

[root@7b0a9902dbeb /]# cd volume01
[root@7b0a9902dbeb volume01]# ls
[root@7b0a9902dbeb volume01]# touch av.txt
[root@7b0a9902dbeb volume01]# ls
av.txt
[root@7b0a9902dbeb volume01]#

#进入宿主机 

[root@ldk ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b0a9902dbeb 49a84ce17460 "/bin/bash" 5 minutes ago Up 5 minutes serene_napier
709e5d31a7ad nginx "/docker-entrypoint.…" 57 minutes ago Up 57 minutes 0.0.0.0:32769->80/tcp nginx02
9aef70a2a4a5 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:32768->80/tcp nginx01
[root@ldk ~]# docker inspect 7b0a9902dbeb
...
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/11bd55866068e52271cf7f50ab7adf3fdb1eef887f0f3560810ce83d36a44fcb-init/diff:/var/lib/docker/overlay2/07e92bfd3de681a8ac6ef84545406794783f828fd4f8f0303be4f18ae4e4e198/diff",
"MergedDir": "/var/lib/docker/overlay2/11bd55866068e52271cf7f50ab7adf3fdb1eef887f0f3560810ce83d36a44fcb/merged",
"UpperDir": "/var/lib/docker/overlay2/11bd55866068e52271cf7f50ab7adf3fdb1eef887f0f3560810ce83d36a44fcb/diff",
"WorkDir": "/var/lib/docker/overlay2/11bd55866068e52271cf7f50ab7adf3fdb1eef887f0f3560810ce83d36a44fcb/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "d4a5330aa541110183f279343a769ec93712ec71f6b71ebb71a76a452e3e21e2","Source": "/var/lib/docker/volumes/d4a5330aa541110183f279343a769ec93712ec71f6b71ebb71a76a452e3e21e2/_data", "Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
...
[root@ldk ~]# cd /var/lib/docker/volumes/d4a5330aa541110183f279343a769ec93712ec71f6b71ebb71a76a452e3e21e2/_data
[root@ldk _data]# ll
total 0
-rw-r--r-- 1 root root 0 Jun 20 17:50 av.txt
[root@ldk _data]#


四、数据卷容器

多个mysql同步数据!

#启动我们自己制作的镜像(注:启动命名最后一个参数,要么填写镜像id。要么填写 镜像名称+tag,否则会报错)
[root@ldk /]# docker run -it --name docker01 ldk/centos:1.0
[root@8a3e0b293bf9 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01    volume02

#启动成功之后 退出容器(Control + P + Q)

[root@8a3e0b293bf9 /]# [root@ldk /]#

#依赖docker01启动docker02,docker01就叫做数据卷容器 [root@ldk /]# docker run -it --name docker02 --volumes-from docker01 ldk/centos:1.0 [root@ee6fa31cd361 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 [root@ee6fa31cd361 /]# cd volume01 [root@ee6fa31cd361 volume01]# ls

#进入docker01内部在挂载目录 volumes01下创建一个文件

[root@ldk /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee6fa31cd361 ldk/centos:1.0 "/bin/sh -c /bin/bash" About a minute ago Up About a minute docker02
8a3e0b293bf9 ldk/centos:1.0 "/bin/sh -c /bin/bash" 4 minutes ago Up 4 minutes docker01
[root@ldk /]# docker attach 8a3e0b293bf9
[root@8a3e0b293bf9 /]# cd volume01
[root@8a3e0b293bf9 volume01]# ls
[root@8a3e0b293bf9 volume01]# touch docker01
[root@8a3e0b293bf9 volume01]# lsdocker01
[root@8a3e0b293bf9 volume01]#


#进入docker02内部在挂载目录 volumes01 查看是否有同步更新的文件
[root@ee6fa31cd361 volume01]# ls
docker01
[root@ee6fa31cd361 volume01]# 
#同理:创造一个docker03依赖docker01,效果一样,时拿出docker01,docker02 和docker03 已经 同步拷贝 的文件,依然存在!

 

五、DockerFile介绍

1、基础介绍:

  dockerfile就是用来构建docker镜像的文件,定义了一切步骤,就是一段包含命令和参数的可执行脚本。

构建步骤:1、编写一个dockerfile文件

        2、docker build 构建成为一个镜像

     3、docker run 运行镜像

     4、docker push 发布镜像(DockerHub 、阿里云镜像仓库)

构建过程:

  基础知识:1、每个保留关键字(指令)都必须是大写字母

        2、从上向下执行

        3、# 表示注释

        4、每个指令都会创建一个新的镜像层,并提交

 小总结:DockerFile是面向开发的,我们要发布项目,就需要制作镜像,就需要编写dockerfile文件,Docker镜像逐渐成为企业交付的标准。

    DockerFile:构建镜像的初始化文件,源代码。

    DockerImages:通过DockerFile构建生成的容器,最终发布和运行的产品。

    Docker容器:容器就是镜像运行起来的服务器。

DockerFile指令:

FROM      #基础镜像,一切的开始
MANTAINER   #镜像作者(姓名+邮箱)
RUN       #镜像构建的时候需要运行的命令
ADD       #步骤中添加tomcat镜像,这个tomcat压缩包就是添加内容
WORKDIR     #镜像的挂载目录
VOLUME     #挂载的目录位置
EXPOSE     #指定暴露端口
CMD       #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代,如果替代之后不是命令,会报错的
ENTRYPOINT   #指定这个容器启动的时候要运行的命令,可以追加执行命令
ONBUILD     #当构建一个被继承的DockerFile,这个时候就会运行ONBUILD 的指令,触发指令。
COPY       #类似AD的,将我们的镜像拷贝到镜像中
WNV       #构建的时候这只环境变量

2、实战:构建自己的centos

#1、编写DockerFile文件

[root@ldk home]# mkdir dockerfile
[root@ldk home]# cd dockerfile/
[root@ldk dockerfile]# ll
total 0
[root@ldk dockerfile]# vim dockerfile01

DockerFile文件内容:

FROM centos

MAINTAINER ldk<[email protected]>

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

#2、通过这个DockerFile构建镜像

[root@ldk dockerfile]# docker build -f dockerfile01 -t ldkcentos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 470671670cac
Step 2/10 : MAINTAINER ldk<[email protected]>

...

---> Running in 58114b729de4
Removing intermediate container 58114b729de4
---> 3c797ceb67f6Successfully built 3c797ceb67f6Successfully tagged ldkcentos:0.1
[root@ldk dockerfile]# 

#3、构建成功,测试运行

[root@ldk dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZEldkcentos 0.1 3c797ceb67f6 5 minutes ago 317MB
ldk/centos 1.0 49a84ce17460 6 hours ago 237MB
tomcat latest 2eb5a120304e 10 days ago 647MB
nginx latest 2622e6cca7eb 10 days ago 132MB
mysql 5.7 9cfcce23593a 11 days ago 448MB
mysql latest be0dbf01a0f3 11 days ago 541MB
centos latest 470671670cac 5 months ago 237MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
[root@ldk dockerfile]#

#启动自己构建的镜像

[root@ldk dockerfile]# docker run -it ldkcentos:0.1
[root@b334b9f261bf local]#

#我们发现进入镜像,直接进入了刚才DockerFile 设置的工作目录 /usr/local 下。

#4、docker history 镜像id  :查看镜像的构建过程历史信息,可以自己试一下,方便自己研究镜像的构建历史,这里就不在赘述。



3、实战:DockerFile制作tomcat镜像

#1、准备镜像文件  tomcat压缩包,jdk压缩包

#2、编写dockerfile文件,官方命名:DockerFile,build会自动寻找这个文件,就不需要-f指定了

[root@ldk tomcat]# vim Dockerfile

  #文件内容(特别注意:加粗部分的参数切勿写错,因为写错也不报错,最后执行也能成功,比较难检查错误):

FROM centos
MAINTAINER ldk<[email protected]>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u65-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.28.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_65ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_MOHE/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-8.0.28ENV CATLINA_BASH /usr/local/apache-tomcat-8.0.28ENV PATH $PATH:$JAVA_HOME/bin:$CATALIN_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.0.28/bin/startup.sh && tail -F /url/local/apache-tomcat-8.0.28/bin/logs/catalina.out


3、构建镜像(不要忘记后面的 .)

[root@ldk tomcat]# docker build -t diytomcat .

[root@ldk tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZEdiytomcat latest 2835818b0158 15 minutes ago 672MB
ldkcentos 0.1 3c797ceb67f6 About an hour ago 317MB
ldk/centos 1.0 49a84ce17460 7 hours ago 237MB
tomcat latest 2eb5a120304e 10 days ago 647MB
nginx latest 2622e6cca7eb 11 days ago 132MB
mysql 5.7 9cfcce23593a 11 days ago 448MB
mysql latest be0dbf01a0f3 11 days ago 541MB
centos latest 470671670cac 5 months ago 237MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
[root@ldk tomcat]#


4、启动镜像(特别注意:第一个容器的挂载目录可以写webapp下,方便修改部署项目)

[root@ldk tomcat]# docker run -d -p 9090:8080 --name ldkdiytomcat -v /home/ldk/build/tomcat/test:/url/local/apache-tomcat-8.0.28/webapps/ -v /home/ldk/build/tomcat/tomcatlogs/:/url/local/apache-tomcat-8.0.28/logs diytomcat
d29fef718ec1b522847d1be13811dcfe6bd64da753c2e887fa54fa982ce2d35f

[root@ldk tomcat]# pwd
/home/ldk/build/tomcat
[root@ldk tomcat]# ll
total 8
drwxr-xr-x 2 root root 4096 Jun 21 00:54 test
drwxr-xr-x 2 root root 4096 Jun 21 00:55 tomcatlogs
[root@ldk tomcat]#ll

total 8
drwxr-xr-x 2 root root 4096 Jun 21 00:54 test
drwxr-xr-x 2 root root 4096 Jun 21 00:55 tomcatlogs
[root@ldk tomcat]#


5、外网访问测试(xxx.xxx.xxx.xxx:9090)

#ok,项目发布成功

以下为7月5号更新=======================》

六、发布自己的镜像到DockerHub 或者 阿里云容器服务

发布到DockerHub 

1、注册自己DockerHub的账号,网址:https://hub.docker.com/

2、登录 自己的 DockerHub

[root@ldk ~]# docker login -u ldkywzq
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@ldk ~]# 

3、PUSH

1、找到想要push的镜像

  [root@ldk ~]# docker images
  REPOSITORY TAG IMAGE ID CREATED SIZE  gstomcat latest 0aefabe3523b 12 days ago 672MB   //这是我将要push的镜像
  diytomcat01 latest 2835818b0158 2 weeks ago 672MB
  diytomcat latest 2835818b0158 2 weeks ago 672MB
  ldkcentos 0.1 3c797ceb67f6 2 weeks ago 317MB
  ldk/centos 1.0 49a84ce17460 2 weeks ago 237MB
  tomcat latest 2eb5a120304e 3 weeks ago 647MB
  nginx latest 2622e6cca7eb 3 weeks ago 132MB
  mysql 5.7 9cfcce23593a 3 weeks ago 448MB
  mysql latest be0dbf01a0f3 3 weeks ago 541MB
  centos latest 470671670cac 5 months ago 237MB
  hello-world latest bf756fb1ae65 6 months ago 13.3kB
  [root@ldk ~]#

2、为这个镜像打一个版本号(注:ldkywzq 要和 DockerHub 用户名保持一致,否则会 报错:denied: requested access to the resource is denied)
[root@ldk ~]# docker tag 0aefabe3523b ldkywzq/tomcat:1.0
[root@ldk ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ldk/tomcat          1.0                 0aefabe3523b        12 days ago         672MB
ldkywzq/tomcat      1.0                 0aefabe3523b        12 days ago         672MB
gstomcat            latest              0aefabe3523b        12 days ago         672MB
diytomcat01         latest              2835818b0158        2 weeks ago         672MB
diytomcat           latest              2835818b0158        2 weeks ago         672MB
ldkcentos           0.1                 3c797ceb67f6        2 weeks ago         317MB
ldk/centos          1.0                 49a84ce17460        2 weeks ago         237MB
tomcat              latest              2eb5a120304e        3 weeks ago         647MB
nginx               latest              2622e6cca7eb        3 weeks ago         132MB
mysql               5.7                 9cfcce23593a        3 weeks ago         448MB
mysql               latest              be0dbf01a0f3        3 weeks ago         541MB
centos              latest              470671670cac        5 months ago        237MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[root@ldk ~]# docker push ldkywzq/tomcat:1.0
The push refers to repository [docker.io/ldkywzq/tomcat]

  a4ffa71a7adb: Pushing [===================================> ] 40.16MB/57.21MB
  5c41923ea7eb: Pushed
  9533cfc71498: Pushing [=====> ] 38.07MB/364.9MB
  0683de282177: Pushing [============> ] 59.68MB/237.1MB



发布到 阿里云容器

1、登录阿里云 - 容器镜像服务 - 创建命名空间

 2、创建容器镜像

 

阿里云提交步骤(阿里云点击进自己的仓库名称,有特别全的提交步骤,这里就不在赘述)
docker login --username=ldkywzq registry.cn-qingdao.aliyuncs.com
docker push registry.cn-qingdao.aliyuncs.com/bilibili-ldkywzq/ldk-test:[镜像版本号]

关于Docker的笔记暂时记录这些了,常用操作命令和知识点基本都有了,就剩个Docker网络没写,说白了也就Linux安装了Docker之后,会自动配置一个属于Dcoker的内部路由器,这个路由器可以打通任何一个Docker内的容器,与宿主机是直连,也可打通。这些知识偏底层一些原理,我不再做记录,就让它交给时间吧,以后慢慢就理解了。

本文的思路大纲是来自《狂神说》免费课程,它是一个不为任何机构组织站台的程序爱好者,乐于开源,忠于自己,绝对宝藏男孩!

大家有兴趣可以去b站参观学习:https://space.bilibili.com/95256449/video

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40083307/article/details/115714317

智能推荐

软件测试流程包括哪些内容?测试方法有哪些?_测试过程管理中包含哪些过程-程序员宅基地

文章浏览阅读2.9k次,点赞8次,收藏14次。测试主要做什么?这完全都体现在测试流程中,同时测试流程是面试问题中出现频率最高的,这不仅是因为测试流程很重要,而是在面试过程中这短短的半小时到一个小时的时间,通过测试流程就可以判断出应聘者是否合适,故在测试流程中包含了测试工作的核心内容,例如需求分析,测试用例的设计,测试执行,缺陷等重要的过程。..._测试过程管理中包含哪些过程

政府数字化政务的人工智能与机器学习应用:如何提高政府工作效率-程序员宅基地

文章浏览阅读870次,点赞16次,收藏19次。1.背景介绍政府数字化政务是指政府利用数字技术、互联网、大数据、人工智能等新技术手段,对政府政务进行数字化改革,提高政府工作效率,提升政府服务质量的过程。随着人工智能(AI)和机器学习(ML)技术的快速发展,政府数字化政务中的人工智能与机器学习应用也逐渐成为政府改革的重要内容。政府数字化政务的人工智能与机器学习应用涉及多个领域,包括政策决策、政府服务、公共安全、社会治理等。在这些领域,人工...

ssm+mysql+微信小程序考研刷题平台_mysql刷题软件-程序员宅基地

文章浏览阅读219次,点赞2次,收藏4次。系统主要的用户为用户、管理员,他们的具体权限如下:用户:用户登录后可以对管理员上传的学习视频进行学习。用户可以选择题型进行练习。用户选择小程序提供的考研科目进行相关训练。用户可以进行水平测试,并且查看相关成绩用户可以进行错题集的整理管理员:管理员登录后可管理个人基本信息管理员登录后可管理个人基本信息管理员可以上传、发布考研的相关例题及其分析,并对题型进行管理管理员可以进行查看、搜索考研题目及错题情况。_mysql刷题软件

根据java代码描绘uml类图_Myeclipse8.5下JAVA代码导成UML类图-程序员宅基地

文章浏览阅读1.4k次。myelipse里有UML1和UML2两种方式,UML2功能更强大,但是两者生成过程差别不大1.建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int..._根据以下java代码画出类图

Flume自定义拦截器-程序员宅基地

文章浏览阅读174次。需求:一个topic包含很多个表信息,需要自动根据json字符串中的字段来写入到hive不同的表对应的路径中。发送到Kafka中的数据原本最外层原本没有pkDay和project,只有data和name。因为担心data里面会空值,所以根同事商量,让他们在最外层添加了project和pkDay字段。pkDay字段用于表的自动分区,proejct和name合起来用于自动拼接hive表的名称为 ..._flume拦截器自定义开发 kafka

java同时输入不同类型数据,Java Spring中同时访问多种不同数据库-程序员宅基地

文章浏览阅读380次。原标题:Java Spring中同时访问多种不同数据库 多样的工作要求,可以使用不同的工作方法,只要能获得结果,就不会徒劳。开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了。本文以在Spring框架下开发一个Sp..._根据输入的不同连接不同的数据库

随便推点

EFT试验复位案例分析_eft电路图-程序员宅基地

文章浏览阅读3.6k次,点赞9次,收藏25次。本案例描述了晶振屏蔽以及开关电源变压器屏蔽对系统稳定工作的影响, 硬件设计时应考虑。_eft电路图

MR21更改价格_mr21 对于物料 zba89121 存在一个当前或未来标准价格-程序员宅基地

文章浏览阅读1.1k次。对于物料价格的更改,可以采取不同的手段:首先,我们来介绍MR21的方式。 需要说明的是,如果要对某一产品进行价格修改,必须满足的前提条件是: ■ 1、必须对价格生效的物料期间与对应会计期间进行开启; ■ 2、该产品在该物料期间未发生物料移动。执行MR21,例如更改物料1180051689的价格为20000元,系统提示“对于物料1180051689 存在一个当前或未来标准价格”,这是因为已经对该..._mr21 对于物料 zba89121 存在一个当前或未来标准价格

联想启天m420刷bios_联想启天M420台式机怎么装win7系统(完美解决usb)-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏13次。[文章导读]联想启天M420是一款商用台式电脑,预装的是win10系统,用户还是喜欢win7系统,该台式机采用的intel 8代i5 8500CPU,在安装安装win7时有很多问题,在安装win7时要在BIOS中“关闭安全启动”和“开启兼容模式”,并且安装过程中usb不能使用,要采用联想win7新机型安装,且默认采用的uefi+gpt模式,要改成legacy+mbr引导,那么联想启天M420台式电..._启天m420刷bios

冗余数据一致性,到底如何保证?-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏9次。一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能..._保证冗余性

java 打包插件-程序员宅基地

文章浏览阅读88次。是时候闭环Java应用了 原创 2016-08-16 张开涛 你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置..._那么需要把上面的defaultjavatyperesolver类打包到插件中

VS2015,Microsoft Visual Studio 2005,SourceInsight4.0使用经验,Visual AssistX番茄助手的安装与基本使用9_番茄助手颜色-程序员宅基地

文章浏览阅读909次。1.得下载一个番茄插件,按alt+g才可以有函数跳转功能。2.不安装番茄插件,按F12也可以有跳转功能。3.进公司的VS工程是D:\sync\build\win路径,.sln才是打开工程的方式,一个是VS2005打开的,一个是VS2013打开的。4.公司库里的线程接口,在CmThreadManager.h 里,这个里面是我们的线程库,可以直接拿来用。CreateUserTaskThre..._番茄助手颜色

推荐文章

热门文章

相关标签