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

智能推荐

Eclipse中配置WebMagic(已配置好Maven)_使用eclipse搭建webmagic工程-程序员宅基地

文章浏览阅读364次。1.WebMagicWebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。2.在Eclipse中配置WebMagic1.首先需要下载WebMagic的压缩包官网地址为:WebMagic官网最新版本为:WebMagic-0.7.3,找到对应版本,打开下载界面,注意,下载要选择Source code(zip)版本,随便下载到哪里都可以;2.下载好的压缩包需要解压,此时解压到的位置即为后续新建的Eclipse的project位置,比如我的Ecli_使用eclipse搭建webmagic工程

linux启动mysql_linux如何启动mysql服务_linux启动mysql服务命令是什么-系统城-程序员宅基地

文章浏览阅读1.9k次。mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用。一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置。那么linux该如何启动mysql服务呢?接下来小编就给大家带来linux启动mysql服务的命令教程。具体步骤如下:1、首先,我们需要修改mysql的配置文件,一般文件存放在/etc下面,文件名为my.cnf。2、对于mysql..._linux中 mysql 启动服务命令

php实现在线oj,详解OJ(Online Judge)中PHP代码的提交方法及要点-程序员宅基地

文章浏览阅读537次。详解OJ(Online Judge)中PHP代码的提交方法及要点Introduction of How to submit PHP code to Online Judge SystemsIntroduction of How to commit submission in PHP to Online Judge Systems在目前常用的在线oj中,codeforces、spoj、uva、zoj..._while(fscanf(stdin, "%d %d", $a, $b) == 2)

java快捷键调字体_设置MyEclipse编码、补全快捷键、字体大小-程序员宅基地

文章浏览阅读534次。一、设置MyEclipse编码(1)修改工作空间的编码方式:Window-->Preferences-->General-->Workspace-->Text file encoding(2)修改一类文件的编码方式:Window-->Preferences-->General-->content Types-->修改default Encoding(..._java修改快捷缩写内容

解析蓝牙原理_蓝牙原理图详解-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏76次。1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛的相关资料却少之又少。分析原因,大概因为虽然蓝牙协议是完整的,但是并没有具体的实现。蓝牙芯片公司只负责提供最底层的API_蓝牙原理图详解

从未在一起更让人遗憾_“从未在一起和最终没有在一起哪个更遗憾”-程序员宅基地

文章浏览阅读7.7k次。图/源于网络文/曲尚菇凉1.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾

随便推点

Spring Cloud Alibaba 介绍_sprngcloud alba-程序员宅基地

文章浏览阅读175次。Spring Cloud Alibaba 介绍Sping体系Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Spring Boot 以 Application(应用) 为中心,提供自动配置、监控等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。Sping Cloud介绍官方介绍​ Tools for building common patterns in distributed systems_sprngcloud alba

测试 数据类型的一些测试点和经验_基础字段的测试点-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏21次。我这里是根据之前在测试数据类项目过程中的一些总结经验和掉过个坑,记录一下,可以给其他人做个参考,没什么高深的东西,但是如果不注意这些细节点,后期也许会陷入无尽的扯皮当中。1 需求实现的准确度根据产品需求文档描述发现不明确不详细的或者存在歧义的地方一定要确认,例如数据表中的一些字段,与开发和产品确认一遍,如有第三方相关的,要和第三方确认,数据类项目需要的是细心,哪怕数据库中的一个字段如果没有提前对清楚,后期再重新补充,会投入更大的精力。2 数据的合理性根据业务场景/常识推理,提..._基础字段的测试点

一文看懂:行业分析怎么做?_码工小熊-程序员宅基地

文章浏览阅读491次。大家好,我是爱学习的小xiong熊妹。在工作和面试中,很多小伙伴会遇到“对XX行业进行分析”的要求。一听“行业分析”四个字,好多人会觉得特别高大上,不知道该怎么做。今天给大家一个懒人攻略,小伙伴们可以快速上手哦。一、什么是行业?在做数据分析的时候,“行业”两个字,一般指的是:围绕一个商品,从生产到销售相关的全部企业。以化妆品为例,站在消费者角度,就是简简单单的从商店里买了一支唇膏回去。可站在行业角度,从生产到销售,有相当多的企业在参与工作(如下图)在行业中,每个企业常常扮._码工小熊

LLaMA 简介:一个基础的、650 亿参数的大型语言模型_llma-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏2次。还需要做更多的研究来解决大型语言模型中的偏见、有毒评论和幻觉的风险。我们在数万亿个令牌上训练我们的模型,并表明可以仅使用公开可用的数据集来训练最先进的模型,而无需诉诸专有和不可访问的数据集。在大型语言模型空间中训练像 LLaMA 这样的小型基础模型是可取的,因为它需要更少的计算能力和资源来测试新方法、验证他人的工作和探索新的用例。作为 Meta 对开放科学承诺的一部分,今天我们公开发布 LLaMA(大型语言模型元 AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进他们在 AI 子领域的工作。_llma

强化学习在制造业领域的应用:智能制造的未来-程序员宅基地

文章浏览阅读223次,点赞3次,收藏5次。1.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...

ansible--安装与使用_pip安装ansible-程序员宅基地

文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible

推荐文章

热门文章

相关标签