Docker基礎學習(學習筆記)

2020-08-09 14:38:06

Docker學習

  • Docker概述
  • Docker安裝
  • Docker命令
    • 映象命令
    • 容器命令
    • 操作命令
  • Docker映象
  • 容器數據卷
  • DockerFile
  • Docker網路原理
  • IDEA整合Docker
  • Docker Compose
  • Docker Swarm
  • CI/CD Jenkins

Docker概述

Docker爲什麼出現?

一款產品:開發上線 兩套環境!應用環境,應用設定

開發—運維。問題:在我的電腦上可以執行,版本更新,導致服務不可用,對於運維來說,考驗就十分大

環境設定是十分麻煩的,每一個機器都要部署環境(叢集Redis、ES、Hadoop)!費時費力的.

發佈一個專案(jar+(Redis、Mysql、JDK、ES)),專案能否都帶上環境安裝打包!

之前在伺服器設定一個應用的環境Redis、MYSQL、jdk設定超級麻煩,不能跨平臺

傳統:開發jar、運維來做!

現在:開發打包部署上線,一套流程做完!

Dcoker給以上的問題,提出瞭解決方案!

隔離:Docker核心思想!打包裝箱!每個箱子是互相隔離的。

Docker通過隔離機制 機製,可以將伺服器利用到極致!

本質:所有的技術都是因爲出現了一些問題,我們需要去解決,纔去學習!

Docker歷史

2010年,幾個搞it的年輕人,在美國成立了一家公司「dotCloud」

做一些pass的雲端計算服務,LXC有關的容器技術

Docker剛剛誕生的時候,沒有引起行業的注意!就將Docker開源化

2013年開源化。

Docker越來越多的人發現Docker的有點,Docker每一個月都會更新一個版本

Docker爲什麼這麼火?十分輕巧

在容器技術出來之前,我們都是使用虛擬機器的技術!

虛擬機器:在Windows裝一個VM,通過這個軟體可以虛擬出來一臺或者多臺電腦!笨重!

虛擬機器也是一種屬於虛擬化技術,Docker容器技術,也是一種虛擬化技術

vm:linux centos原生映象,隔離,需要開啓多個虛擬機器 幾個G

docker:隔離,映象(最核心的映象4m大小 +jdk+mysql)十分的小巧,執行映象就可以了 幾M kb 秒級啓動!

到現在,所有開發人員都必須要會Docker!

聊一聊Docker

Docker是基於Go語言開發的!開源專案!

官網:https://www.docker.com/

文件地址:https://docs.docker.com/ Docker的文件是超級詳細的!

倉庫地址:https://hub.docker.com/

虛擬機器的缺點

  1. 資源佔用十分多
  2. 冗餘步驟多
  3. 啓動很慢!

容器化技術

容器化技術不是模擬的一個完整的操作系統

比較Docker和虛擬機器技術的不同:

  • 傳統虛擬機器,虛擬出一條硬體,執行一個完整的操作系統,然後在這個系統上安裝和執行軟體
  • 容器內的應用直接執行在宿主機的內容,容器是沒有自己的內核的,也沒有虛擬我們的硬體,所以就輕便了
  • 每個容器間是互相隔離,每個容器內都有一個屬於自己的檔案系統,互不影響。

DevOps(開發、運維)

應用更快速的交付和部署

傳統:一堆幫助文件、安裝程式

Docker:打包映象發佈測試,一鍵執行

更便捷的升級和擴縮容

使用了Docker之後,我們部署應用就和搭積木一樣!

更簡單的系統運維

在容器化之後,我們的開發,測試環境都是高度一致的

更高效的計算資源利用

Docker是內核級別的虛擬化,可以在我們一個物理機上執行很多的容器範例。伺服器的效能可以被壓榨到極致

Docker安裝

Docker的基本組成

映象(image):

docker映象就好像是一個模板,可以通過這個模板來建立容器服務,tomcat映象===>run====>tomcat01容器(提供服務)

通過這個映象可以建立多個容器(最終服務執行或者專案執行就是在容器中)

容器(container):

Docker利用容器技術,獨立執行一個或者一個組應用,通過映象來建立的

啓動、停止、刪除、基本命令

目前就可以吧這個容器理解爲就是一個簡易的linux

倉庫(repository):

倉庫就是存放映象的地方!

倉庫氛圍共有倉庫和私有倉庫

Docker hub(預設是國外的)

阿裡雲都有容器伺服器(設定映象加速)

安裝Docker

環境準備

1.需要linux基礎

2.CentOS7

#系統內核是3.10以上
root@hecs-x-medium-2-linux-20200722093047:/# uname -r
4.15.0-91-generic	
#系統版本
root@hecs-x-medium-2-linux-20200722093047:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
root@hecs-x-medium-2-linux-20200722093047:/# uname -r
4.15.0-91-generic
root@hecs-x-medium-2-linux-20200722093047:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
1.解除安裝舊版本Docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2.安裝需要的安裝包
sudo yum install -y yum-utils

3.設定映象的倉庫
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安裝Docker、docker-ce社羣 ee企業版
yum install docker-ce docker-ce-cli containerd.io
5.啓動docker
 systemctl start docker
6.使用docker version是否安裝成功

7.執行hello-world
8.檢視一下下載的hello-world映象
docker images

瞭解:解除安裝docker

1.解除安裝依賴
2.刪除資源

3.設定使用

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://10xg6ow3.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

回顧HelloWorld流程

底層原理

docker是怎麼工作的?

Docker是一個Clinet-Server結構的系統

Docker爲什麼比VM快

1.docker有着比虛擬機器更少的抽象層

2.docker利用的是宿主機的內核,vm需要Guest OS

所以說,新建一個容器的時候,docker不需要跟虛擬機器一樣重新載入一個操作系統內核,避免引導。虛擬機器是載入Guest OS,分鐘級別。Docker是利用宿主機的操作系統,省略了這個複雜的過程,秒級的。

Docker的常用命令

幫組命令

docker version  	#顯示docker 的詳細資訊
doceker info 			#顯示docker的系統資訊,包括映象和容器的數量
docker  --help 		#幫忙命令(萬能命令)

幫助文件的地址:https://docs.docker.com/engine/reference/run/

映象命令

docker images 檢視所有原生的主機上的映象
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

#解釋
REPOSITORY	映象倉庫源
TAG					映象的標籤
IMAGE ID		映象的id
CREATE			映象的建立時間
SIZE				映象的大小
#可選項
  -a, --all             Show all images (default hides intermediate images)#列出所有的映象
  -q, --quiet           Only show numeric IDs #只顯示映象的id
docker search搜尋映象
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9763                [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3564                [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   717                                     [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   78
#可選項 通過搜尋來過濾
--filter 過濾
docker pull 下載映象
# 下載映象 docker pull  映象名[:tag]
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull mysql
Using default tag: latest#如果不寫tag預設是latest
6ec8c9369e08: Pull complete#分層下載。docker image的核心,聯合檔案系統
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc
Status: Downloaded newer image for mysql:latest#真實地址
docker.io/library/mysql:latest
#安裝指定版本的mysql
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ec8c9369e08: Already exists#聯合檔案系統中會去重
177e5de89054: Already exists
ab6ccb86eb40: Already exists
e1ee78841235: Already exists
09cd86ccee56: Already exists
78bea0594a44: Already exists
caf5f529ae89: Already exists
4e54a8bcf566: Pull complete
50c21ba6527b: Pull complete
68e74bb27b39: Pull complete
5f13eadfe747: Pull complete
Digest: sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59fe9ae24
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 刪除映象
#單個刪除映象
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker rmi 8679ced16d20
Untagged: mysql:5.7
Untagged: mysql@sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59fe9ae24
Deleted: sha256:8679ced16d206961b35686895b06cfafefde87ef02b518dfc2133081ebf47cda
Deleted: sha256:355f87dc5125a32cc35898a4dde17fb067585bc0d86704b5a467c0ccc0eea484
Deleted: sha256:8299d5c38042216210125535adb2600e46268a0e2b9ec799d12ea5b770236e79
Deleted: sha256:07311a303b2c7cf2ac6992aaf68e12326fe7255985166939cbab7d18b10e0f47
Deleted: sha256:306c9bc1ce2997d000bb6f1ea4108420d9752df93ce39164b7a2f876b954afc4
#刪除多個映象
docker rmi -f 映象id 映象id
#刪除所有映象
docker rmi -f $(docker images -aq)

容器命令

說明:有了映象纔可以建立容器,下載一個Contos映象來測試學習

docker pull centos

新建容器並啓動

docker run [可選參數] image
#參數說明
--name=「Name」 容器名稱。用於區分容器
-d						後臺方式執行
-it						使用互動方式執行,進入容器檢視內容
-p						指定容器的埠-p:8080:800
		主機埠:容器埠
		容器埠
-P						隨機指定埠

#測試,啓動並進入容器
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it centos /bin/bash
[root@14237998fa91 /]# ls #檢視容器內的contos 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出所有的執行容器

#docker ps 命令
-a 			 #列出當前正在執行的容器,帶出歷史執行的容器
-n=#顯示最近建立的容器(顯示個數)
-q 			#只顯示容器的編號
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
14237998fa91        centos              "/bin/bash"         6 minutes ago       Exited (0) 5 minutes ago                          relaxed_raman
8b9fce2191c4        centos              "/bin/bash"         2 hours ago         Exited (127) 10 minutes ago                       optimistic_jennings
bbdc853e6782        bf756fb1ae65        "/hello"            15 hours ago        Exited (0) 15 hours ago                           blissful_goldstine

[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps -n=2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
14237998fa91        centos              "/bin/bash"         7 minutes ago       Exited (0) 5 minutes ago                          relaxed_raman
8b9fce2191c4        centos              "/bin/bash"         2 hours ago         Exited (127) 10 minutes ago                       optimistic_jennings

退出容器

exit #直接容器停止並退出
ctrl +P+Q #容器不停止退出

刪除容器

docker rm 容器id							#刪除指定容器,不能刪除在執行的容器 強制刪除 rm -f
docker rm -f $(docker ps -aq) #刪除所有容器

啓動和停止容器

docker start 容器id		#啓動容器
docker restart 容器id #重新啓動容器
docker stop 容器id		#停止當前正在執行的容器
docker kill 容器id		#強制停止當前容器

常用的其他命令

docker run -d #後臺啓動
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d centos
d4c4d2b11b828faab1d4fd2e1707f48403afb1ce4bd7b561aad5e3bfcf90e185
#問題 docker ps 發現centos停止了
#常見的坑,docker容器使用後臺執行,就必須要有一個前臺進程。doker發現沒有應用,就會自動停止。
#nginx容器啓動後,發現自己沒有提供服務,就會立即停止,就沒有程式了

檢視日誌命令

docker logs
     --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)

檢視容器的進程資訊

#docker top 容器id
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker top 70bf5764e384 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                23199               23183               0                   16:23               ?                   00:00:00            /bin/bash

檢視映象的元數據

#docker inspect
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker inspect 70bf5764e384

進入當前正在執行的容器

#我們通常容器都是使用後臺方式執行的,需要進入容器,修改一定的設定

#命令
docker exec -it 容器id bashshell

[root@hecs-x-medium-2-linux-20200722093047 ~]# docker exec -it 70bf5764e384 /bin/bash
[root@70bf5764e384 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:23 pts/0    00:00:00 /bin/bash
root        19     0  0 08:37 pts/1    00:00:00 /bin/bash
root        33    19  0 08:37 pts/1    00:00:00 ps -ef

#方式二
docker attach 容器id 

#docker exec #進入容器後開啓一個新的終端,可以在裏面操作(重用)
#docker attach #進入容器正在執行的終端,不會啓動新的進程!

從容器內拷貝檔案到主機上

docker cp 容器id:地址1 地址2

作業練習

Docker安裝Nginx

# 1.搜尋映象 search 
#	2.下載映象 pull
# 3.執行單元測試
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker search nginx
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker pull nginx
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              8cf1bfb43ff5        3 days ago          132MB
centos              latest              831691599b88        5 weeks ago         215MB

# -d 後臺執行
#	--name 給容器命令
# -p	宿主機埠:容器內部埠
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d --name nginx01 -p 3305:80 8cf1bfb43ff5
d8394ed3a4f3c7938267c7a014158e7b7d818cb11a21a5afa7bcddd6b1344695
[root@hecs-x-medium-2-linux-20200722093047 ~]#
[root@hecs-x-medium-2-linux-20200722093047 ~]#
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   
d8394ed3a4f3        8cf1bfb43ff5        "/docker-entrypoint.…"   3 seconds ago       Up 3 seconds        0.0.0.0:3305->80/tcp   nginx01
70bf5764e384        centos              "/bin/bash"              37 minutes ago      Up 37 minutes                              charming_mcnulty
[root@hecs-x-medium-2-linux-20200722093047 ~]# curl localhost:3305
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

思考問題:每次改動nginx組態檔,都需要進入容器內部。十分麻煩,我們要是可以在容器外部提供一個對映路徑,達到在容器修改檔名,容器內部可以自動修改。

作業2:Docker 裝一個tomcat

1.docker pull tomcat #安裝tomcat
2.[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -d -p 3355:8080 --name tomcat1 tomcat #執行docker
3.設定安全組
4.存取
#坑:容器內/usr/local/tomcat/webapps下沒有任何專案。都是webapps.list檔案下中。cp webapps.list webapps下

root@19d30c65454d:/usr/local/tomcat/webapps# cp -r webapps.dist/* webapps

視覺化工具

portainer(先用這個,圖形化介面工具)

Docker映象講解

映象是什麼

所有的應用,直接打包docker映象,直接跑起來!

如何得到映象

  • 從遠端倉庫下載
  • 朋友拷貝
  • 自己製作一個映象DockerFile

Docker映象載入原理

聯合檔案系統

特點

Docker映象都是隻讀的,當容器啓動時,一個新的可讀層被載入到映象額頂部!

這一層就是我們通常說的容器層,容器之下的都叫映象層。

如何提交一個自己的映象

commit映象

docker commit 提交容器成爲一個新的副本
# 命令和git原理類似
docker commit -m=「提交的描述資訊」 -a=「作者」 容器id 目標映象:【TAG】版本

實戰測試

#1.啓動一個預設的tomcat
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it -d -p 8080:8080 tomcat
#2.發現這個預設的tomcat是沒有webapps應用的,映象的原因,官方的映象預設webapps下面 下麪是沒有檔案的
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker exec -it 6159a7d0aa79 /bin/bash

root@6159a7d0aa79:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@6159a7d0aa79:/usr/local/tomcat# cd webapps
root@6159a7d0aa79:/usr/local/tomcat/webapps# ls
root@6159a7d0aa79:/usr/local/tomcat/webapps# cd ..
root@6159a7d0aa79:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@6159a7d0aa79:/usr/local/tomcat# cd webapps.dist/
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# cd .
root@6159a7d0aa79:/usr/local/tomcat/webapps.dist# cd ..
#3.我自己拷貝進去了基本的檔案
root@6159a7d0aa79:/usr/local/tomcat# cp -r webapps.dist/* webapps #將webapps.list下面 下麪的資料夾copy到webapps目錄下
#4.將我們操作過得容器通過commit提交爲一個映象,我們以後就使用我們修改過的映象

容器數據卷

什麼是容器數據卷

docker 的理念回顧

將應用和環境打包成一個映象!

數據?如果數據都在容器中,那麼我們容器刪除,數據就會丟失!需求:數據可以持久化

MYSQL,容器刪了,刪庫跑步。需求:mysql數據可以儲存在本地

容器之間可以有一個數據共用的技術,Docker容器中產生的數據,同步到本地!

這就是卷技術,目錄的掛載,將我們容器的目錄掛載到linux上面。

總結一句話:容器的持久化和同步操作!容器間也是可以數據共用的

使用數據卷

方式一:直接使用命令來掛載

docker run -it -v 主機目錄,容器目錄 

#測試
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker run -it -d  -v /home/ceshi:/home centos /bin/bash
c760f3aa4e190f2316b1bbdb86341ad760389ff34b8840e53753e83e6e34a14c
#啓動起來我們可以用docker inspect檢視
[root@hecs-x-medium-2-linux-20200722093047 ~]# docker inspect c760f3aa4e19

好處:我們以後修改需要在本地修改即可,容器內會自動同步

實戰:安裝MYSQL

#1.search mysql
#2.pull mysql

DockerFile介紹

dockerFile是用來構建docker映象的檔案!命令參數指令碼

構建步驟

1.編一個dockerfile檔案

2.docker build 構建成爲一個映象

3.docker run執行徑向

4.docker push發佈映象 (dockerhub、阿裡雲映象倉庫!)

DockerFile構建過程

基礎知識:

1.每個保留關鍵字(指令)都是必須大寫字母

2.執行從上到下順序執行

3.#表示註釋

4.每個指令都會建立提交一個新的映象層,並提交!

img

dockerfile都是面向開發的,我們以後要發佈專案。要做映象,就需要編寫dockerfile檔案,這個檔案十分簡單!

步驟:開發部署

Docker映象逐漸成爲了企業交付的標準,就必須要掌握!

DockerFile:構建檔案,定義了一切步驟,原始碼

DockerImages:通過DockerFile構建生成的映象,最終發佈和執行的產品,原來是jar、war

Docker容器:容器就是映象執行起來提供服務的

很多指令:

DockerFile的指令

FROM					#基礎映象,一切從這麼開始構建
MAINTAINER		#映象是誰寫的,姓名+郵箱
RUN						#映象構建的時候需要執行的命令
ADD						#步驟,tomcat映象,這個tomcat壓縮包就是需要新增進去的
WORKDIR				#映象的工作目錄
VOLUME				#掛載的目錄
EXPOSE				#暴露埠
CMD						#指定這個容器啓動的時候要執行的命令,只有最後一個生效,可被替代
ENTRYPOINT		#指定這個容器啓動的時候要執行的命令,可以追加命令
ONBUILD				#當構建一個被繼承的DockerFile這個時候就會執行ONBUILD的指令,觸發指令
COPY					#類似ADD,將我們的檔案拷貝到映象中
ENV						#構建的時候設定環境變數

img

實戰測試,構建Centos

Docker Hub中99%映象都是從這個基礎映象過來的 FROM scratch

建立一個自己的Centos

#1.編寫dockerfile的檔案
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# vim mydockerfile-centos
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER luby<[email protected]>
ENV MYPATH /usr/local
WORKDIR MYPATH
run yum -y install vim
run yum -y install net-tools
EXPOSE 80
CMD echo  "---end---"
CMD /bin/bash
#2. 構建映象
#命令 docker build -f dockerfile 檔案路徑 -t 映象名:【tag】
[root@hecs-x-medium-2-linux-20200722093047 dockerfile]# docker build -f mydockerfile-centos -t mycentos:1.0 .

#3.測試
[root@69fa0e3d375a MYPATH]# vim ca
CM
ENTRYPOINT:

Docker 網路

Docker0

三個網路:

#問題,docker是如何處理容器網路存取的?

企業實戰

Docker Compose

Docker Swarm

CI/CD Jenkins流水線!