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 SIZE
ldk/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]# ls
docker01
[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<107123456@qq.com>

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<107123456@qq.com>

...

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

#3、構建成功,測試運行

[root@ldk dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ldkcentos 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<107123456@qq.com>

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_65
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_MOHE/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.28
ENV CATLINA_BASH /usr/local/apache-tomcat-8.0.28
ENV 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 SIZE
diytomcat 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM