建設(shè)網(wǎng)站com艾滋病阻斷藥
文章目錄
- 前言
- 一、初識Docker
- 1.初識Docker-Docker概述
- 2.初識Docker-安裝Docker
- 3.初識Docker-Docker架構(gòu)
- 4.初識Docker-配置鏡像加速器
- 二、Docker命令
- 1.Docker命令-服務(wù)相關(guān)命令
- 2.Docker命令-鏡像相關(guān)命令
- 3.Docker命令-容器相關(guān)命令
- 三、Docker容器的數(shù)據(jù)卷
- 1.Docker容器數(shù)據(jù)卷-數(shù)據(jù)卷概念及作用
- 2.Docker容器數(shù)據(jù)卷-配置數(shù)據(jù)卷
- 3.Docker容器數(shù)據(jù)卷-數(shù)據(jù)卷容器
- 四、Docker應(yīng)用部署
- 1.Docker應(yīng)用部署-部署MySQL
- 2.Docker應(yīng)用部署-部署Tomcat
- 3.Docker應(yīng)用部署-部署Nginx
- 4.Docker應(yīng)用部署-部署Redis
- 五、Dockerfile
- 1.Dockerfile-鏡像原理
- 2.Dockerfile-容器轉(zhuǎn)為鏡像
- 3.Dockerfile-Dockerfile概述及關(guān)鍵字
- 4.Dockerfile-案例-部署springboot項(xiàng)目
- 5.Dockerfile-案例-自定義centos
- 六、Docker服務(wù)編排
- 1.Docker Compose-概述
- 2.Docker Compose-安裝使用
- 3.使用Docker Compose編排nginx+springboot項(xiàng)目
- 七、Docker私有倉庫
- 1.Docker私有倉庫-搭建
- 2.Docker私有倉庫-上傳鏡像
- 3.Docker私有倉庫-拉取鏡像
- 八、Docker相關(guān)概念
- 1.Docker和虛擬機(jī)比較
- 九、Docker參考手冊
此文檔來源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除!
前言
Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux 或 Windows 操作系統(tǒng)的機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會有任何接口。
一、初識Docker
1.初識Docker-Docker概述
- Docker是一個開源的應(yīng)用容器引擎
- 誕生于2013年初,基于Go 語言實(shí)現(xiàn),dotCloud公司出品(后改名為Docker lnc)
- Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上。
- 容器時完全使用沙箱機(jī)制,相互隔離
- 容器性能開銷極低
- Docker從17.03版本之后分為CE(Community Edition:社區(qū)版)和 EE(Enterprise Edition:企業(yè)版)
小結(jié):Docker是一種容器技術(shù),解決軟件跨環(huán)境遷移的問題
2.初識Docker-安裝Docker
Docker可以運(yùn)行在MAC、Windows、CentOS、UBUNTU等操作系統(tǒng)上,本文基于CentOS7安裝Docker。
- 官網(wǎng):https://www.docker.com/
使用官方安裝腳本自動安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
查看Docker版本(驗(yàn)證是否安裝成功)
docker -v
3.初識Docker-Docker架構(gòu)
Docker 包括三個基本概念:
鏡像(lmage)
:Docker鏡像(lmage),就相當(dāng)于是個root文件系統(tǒng)。比如官方鏡像Ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系統(tǒng)的root文件系統(tǒng)。容器(Container)
:鏡像(lmage)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和對象一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時的實(shí)體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。倉庫(Repository)
:倉庫可看成一個代碼控制中心,用來保存鏡像。
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器。
Docker 容器通過 Docker 鏡像來創(chuàng)建。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類。
4.初識Docker-配置鏡像加速器
默認(rèn)情況下,將來從DockerHub (https://hub.docker.com/)上下載Docker鏡像,太慢。一般都會配置鏡像加速器。
國內(nèi)從 DockerHub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。Docker 官方和國內(nèi)很多云服務(wù)商都提供了國內(nèi)加速器服務(wù),例如:
- 科大鏡像:https://docker.mirrors.ustc.edu.cn/
- 網(wǎng)易:https://hub-mirror.c.163.com/
- 七牛云加速器:https://reg-mirror.qiniu.com
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
我們這邊配置阿里云鏡像加速器
阿里云官網(wǎng):https://www.aliyun.com/
1.訪問阿里云官網(wǎng)→登錄阿里云(沒有阿里云賬號就先注冊在登錄)
2.控制臺→三條橫桿→搜索 “鏡像” →容器鏡像服務(wù)
3.鏡像工具→鏡像加速器
4.選擇自己安裝的系統(tǒng)版本→復(fù)制命令粘貼執(zhí)行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:
一次性全部復(fù)制粘貼,最后一行命令會沒有粘貼成功,注意查看,將最后一行命令重新復(fù)制粘貼執(zhí)行即可
二、Docker命令
1.Docker命令-服務(wù)相關(guān)命令
-
啟動Docker服務(wù)
systemctl start docker
-
停止Docker服務(wù)
systemctl stop docker
-
重啟Docker服務(wù)
systemctl restart docker
-
查看Docker服務(wù)狀態(tài)
systemctl status docker
-
開機(jī)啟動Docker服務(wù)(設(shè)置開機(jī)自啟)
systemctl enable docker
2.Docker命令-鏡像相關(guān)命令
-
查看鏡像
docker images #docker images 列出本地主機(jī)上的鏡像。
各個選項(xiàng)說明:
選項(xiàng)名稱 說明 REPOSITORY 表示鏡像的倉庫源 TAG 鏡像的標(biāo)簽 IMAGE ID 鏡像ID CREATED 鏡像創(chuàng)建時間 SIZE 鏡像大小 查看所有鏡像的IMAGE ID
#查看所有鏡像的IMAGE ID docker images -q
-
搜索鏡像
比如我們需要一個 httpd 的鏡像來作為我們的 web 服務(wù)。我們可以通過 docker search 命令搜索 httpd 來尋找適合我們的鏡像。
docker search 鏡像名 #從網(wǎng)絡(luò)中查找需要的鏡像
各個選項(xiàng)說明:
選項(xiàng)名稱 說明 NAME 鏡像倉庫源的名稱 DESCRIPTION 鏡像的描述 STARS 類似 Github 里面的 star,表示點(diǎn)贊、喜歡的意思 OFFICIAL 是否 docker 官方發(fā)布 AUTOMATED 自動構(gòu)建 -
拉取鏡像
當(dāng)我們在本地主機(jī)上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。如果我們想預(yù)先下載這個鏡像,我們可以使用 docker pull 命令來下載它。
docker pull 鏡像名:版本號 #不跟:版本號,會自動下載最新的版本latest
例子
docker pull redis
docker pull redis:5.0
#查看本地主機(jī)上的鏡像。
docker images
想知道有哪些鏡像版本可以下載,可以去官網(wǎng)搜索查看:http://hub.docker.com/
刪除鏡像
方法一(根據(jù)IMAGE ID刪除)
docker rmi IMAGE ID
例子
docker rmi 7614ae9453d1
方法二(根據(jù)鏡像名+版本號刪除)
docker rmi redis:5.0 #有的時候IMAGE ID會重復(fù),導(dǎo)致報錯,可以使用這個方法刪除
方法三(刪除全部)
#查看所有鏡像的IMAGE ID
docker images -q
#刪除所有鏡像(相當(dāng)于把docker images -q命令執(zhí)行 的結(jié)果當(dāng)成參數(shù)去刪除)
docker rmi `docker images -q`
3.Docker命令-容器相關(guān)命令
查看容器
語法:
docker ps [OPTIONS]
OPTIONS說明:
參數(shù) | 作用 |
---|---|
-a | 顯示所有的容器,包括未運(yùn)行的 |
-f | 根據(jù)條件過濾顯示的內(nèi)容 |
–format | 指定返回值的模板文件 |
-l | 顯示最近創(chuàng)建的容器 |
-n | 列出最近創(chuàng)建的n個容器 |
–no-trunc | 不截斷輸出 |
-q | 靜默模式,只顯示容器編號 |
-s | 顯示總的文件大小 |
實(shí)例
#列出所有在運(yùn)行的容器信息
docker ps
#列出所有未運(yùn)行、在運(yùn)行的容器信息
docker ps -a
輸出詳情介紹:
名稱 | 含義 |
---|---|
CONTAINER ID | 容器 ID |
IMAGE | 使用的鏡像 |
COMMAND | 啟動容器時運(yùn)行的命令 |
CREATED | 容器的創(chuàng)建時間 |
STATUS | 容器狀態(tài) (狀態(tài)有7種:created(已創(chuàng)建)、restarting(重啟中)、running(運(yùn)行中)、removing(遷移中)、paused(暫停)、exited(停止)、dead(死亡)) |
PORTS | 容器的端口信息和使用的連接類型(tcp\udp) |
NAMES | 自動分配的容器名稱 |
創(chuàng)建容器
docker run :創(chuàng)建一個新的容器并運(yùn)行一個命令
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS說明:
參數(shù) | 作用 |
---|---|
-a stdin | 指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項(xiàng) |
-d | 后臺運(yùn)行容器,并返回容器ID |
-i | 以交互模式運(yùn)行容器,通常與 -t 同時使用 |
-P | 隨機(jī)端口映射,容器內(nèi)部端口隨機(jī)映射到主機(jī)的端口 |
-p | 指定端口映射,格式為:主機(jī)(宿主)端口:容器端口 |
-t | 為容器重新分配一個偽輸入終端,通常與 -i 同時使用 |
–name=“nginx-lb” | 為容器指定一個名稱 |
–dns 8.8.8.8 | 指定容器使用的DNS服務(wù)器,默認(rèn)和宿主一致 |
–dns-search example.com | 指定容器DNS搜索域名,默認(rèn)和宿主一致 |
-h “mars” | 指定容器的hostname |
-e username=“ritchie” | 設(shè)置環(huán)境變量 |
–env-file=[] | 從指定文件讀入環(huán)境變量 |
–cpuset=“0-2” or --cpuset=“0,1,2” | 綁定容器到指定CPU運(yùn)行 |
-m | 設(shè)置容器使用內(nèi)存最大值 |
–net=“bridge” | 指定容器的網(wǎng)絡(luò)連接類型,支持 bridge/host/none/container: 四種類型 |
–link=[] | 添加鏈接到另一個容器 |
–expose=[] | 開放一個端口或一組端口 |
–volume , -v | 綁定一個卷 |
實(shí)例
docker run -it --name=mycentos centos:7 /bin/bash
docker run -id --name=mycentos1 centos:7 /bin/bash
說明:
①使用
-it
這兩個參數(shù)后,容器創(chuàng)建后自動進(jìn)入容器中,退出容器后,容器自動關(guān)閉
②使用-d
參數(shù)后,需要使用docke rexec進(jìn)入容器。退出后,容器不會關(guān)閉。
③-it
創(chuàng)建的容器一般稱為交互式容器,-id
創(chuàng)建的容器一般稱為守護(hù)式容器
進(jìn)入容器
在使用 -d 參數(shù)時,容器啟動后會進(jìn)入后臺。此時想要進(jìn)入容器,可以通過以下指令進(jìn)入:
docker attach:連接到正在運(yùn)行中的容器。
語法:
docker attach [OPTIONS] CONTAINER
實(shí)例
注意: 如果從這個容器退出,會導(dǎo)致容器的停止。
docker exec:在運(yùn)行的容器中執(zhí)行命令。推薦大家使用 docker exec 命令,因?yàn)榇嗣顣顺鋈萜鹘K端,但不會導(dǎo)致容器的停止。
語法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS說明:
參數(shù) | 作用 |
---|---|
-d | 分離模式: 在后臺運(yùn)行 |
-i | 即使沒有附加也保持STDIN 打開 |
-t | 分配一個偽終端 |
實(shí)例
docker exec -it mycentos1 /bin/bash
注意: 如果從這個容器退出,容器不會停止,這就是為什么推薦大家使用 docker exec 的原因。
啟動容器
#使用 docker start 啟動一個已停止的容器
docker start 容器名|容器 ID
停止容器
#使用 docker stop 停止一個正在運(yùn)行的容器
docker stop 容器名|容器 ID
重啟容器
docker restart 容器名|容器 ID
刪除容器
docker rm 容器名|容器 ID
查看容器信息
docker inspect : 獲取容器/鏡像的元數(shù)據(jù)。
語法:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS說明:
參數(shù) | 作用 |
---|---|
-f | 指定返回值的模板文件 |
-s | 顯示總的文件大小 |
–type | 為指定類型返回JSON |
三、Docker容器的數(shù)據(jù)卷
1.Docker容器數(shù)據(jù)卷-數(shù)據(jù)卷概念及作用
思考:
- Docker容器刪除后,在容器中產(chǎn)生的數(shù)據(jù)也會隨之銷毀
- Docker 容器和外部機(jī)器可以直接交換文件嗎?
- 容器之間想要進(jìn)行數(shù)據(jù)交互?
數(shù)據(jù)卷
- 數(shù)據(jù)卷是宿主機(jī)中的一個目錄或文件
- 當(dāng)容器目錄和數(shù)據(jù)卷目錄綁定后,對方的修改會立即同步
- 一個數(shù)據(jù)卷可以被多個容器同時掛載
- 一個容器可以被掛載多個數(shù)據(jù)卷
數(shù)據(jù)卷概念
- 宿主機(jī)的一個目錄或文件
數(shù)據(jù)卷作用
- 容器數(shù)據(jù)持久化
- 外部機(jī)器和容器間接通信
- 容器之間數(shù)據(jù)交換
2.Docker容器數(shù)據(jù)卷-配置數(shù)據(jù)卷
- 創(chuàng)建啟動容器時,使用 -v 參數(shù)設(shè)置數(shù)據(jù)卷
docker run ... -v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件) ...
- 注意事項(xiàng):
- 1.目錄必須是絕對路徑
- 2.如果目錄不存在,會自動創(chuàng)建
- 3.可以掛載多個數(shù)據(jù)卷
實(shí)例
:創(chuàng)建容器配置數(shù)據(jù)卷(外部機(jī)器和容器間接通信
)
docker run -it --name=centos1 -v /root/data:/root/data_container centos:7 /bin/bash
當(dāng)容器目錄和數(shù)據(jù)卷目錄綁定后,對方的修改會立即同步
實(shí)例
:刪除容器后重新掛載容器(容器數(shù)據(jù)持久化
)
實(shí)例
:一個容器掛載多個目錄
實(shí)例
:兩個容器掛載到同一個目錄(實(shí)現(xiàn)容器之間數(shù)據(jù)交換
)
1.創(chuàng)建一個容器掛載到 /root/data 目錄下
2. 查看容器 /root/data 目錄下的內(nèi)容
3. 打開一個新的會話窗口,再創(chuàng)建一個容器掛載到 /root/data 目錄下,添加內(nèi)容到test.txt文件中
4. 回到第一個會話窗口會,查看test.txt文件會發(fā)現(xiàn)當(dāng)前容器目錄下也添加了內(nèi)容
3.Docker容器數(shù)據(jù)卷-數(shù)據(jù)卷容器
多個容器進(jìn)行數(shù)據(jù)交換
- 多個容器掛載同一個數(shù)據(jù)卷
- 數(shù)據(jù)卷容器
數(shù)據(jù)卷容器
- 創(chuàng)建一個容器,掛載一個目錄,讓其他容器繼承自該容器(–volumes-from)
- 通過簡單方式實(shí)現(xiàn)數(shù)據(jù)卷配置
配置數(shù)據(jù)卷容器
-
創(chuàng)建啟動 centos3 數(shù)據(jù)卷容器,使用 -v 參數(shù)設(shè)置數(shù)據(jù)卷
docker run -it --name=centos3 -v /volume centos:7 bin/bash
-
創(chuàng)建啟動 centos1 centos2 容器,使用 --volumes-from 參數(shù)設(shè)置數(shù)據(jù)卷(使用新的會話窗口)
docker run -it --name=centos1 --volumes-from centos3 centos:7 bin/bash docker run -it --name=centos2 --volumes-from centos3 centos:7 bin/bash
-
測試(在 centos1 centos2 任意一個容器的volume目錄下創(chuàng)建文件,centos1 centos2 centos3的volume目錄下都會生成對應(yīng)的文件)
四、Docker應(yīng)用部署
1.Docker應(yīng)用部署-部署MySQL
-
案例需求:在Docker容器中部署MySQL,并通過外部MySQL客戶端操作MySQL服務(wù)
-
案例實(shí)現(xiàn)步驟:
①搜索MySQL鏡像
②拉取MySQL鏡像
③創(chuàng)建容器
④操作容器中的MySQL
MySQL部署
- 容器內(nèi)的網(wǎng)絡(luò)服務(wù)和外部機(jī)器不能直接通信
- 外部機(jī)器和宿主機(jī)可以直接通信
- 宿主機(jī)和容器可以直接通信
- 當(dāng)容器中的網(wǎng)絡(luò)服務(wù)需要被外部機(jī)器訪問時,可以將容器中提供服務(wù)的端口映射到宿主機(jī)的端口上。外部機(jī)器訪問宿主機(jī)的該端口,從而間接訪問容器的服務(wù)。
- 這種操作稱為:
端口映射
一、搜索MySQL鏡像
docker search mysql
二、拉取MySQL鏡像
docker pull mysql:latest
三、查看本地鏡像
docker images
四、在 /root 目錄下創(chuàng)建mysql目錄用于存儲mysql數(shù)據(jù)信息,進(jìn)入到mysql目錄中
#創(chuàng)建mysql目錄
mkdir mysql
#進(jìn)入到mysql目錄
cd mysql
五、創(chuàng)建容器,設(shè)置端口映射、目錄映射
docker run -id \
-p 3306:3306 \
--name=mysql-test \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:latest
- 參數(shù)說明
- -p 3306:3306:映射容器服務(wù)的 3306 端口到宿主機(jī)的 3306 端口,外部主機(jī)可以直接通過 宿主機(jī) ip:3306 訪問到 MySQL 的服務(wù)。冒號前面代表的是宿主機(jī)端口號。
- -v $PWD/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄
- -v $PWD/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄
- -v $PWD/data:/var/lib/mysql: 將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql。數(shù)據(jù)目錄
- MYSQL_ROOT_PASSWORD=123456:設(shè)置 MySQL 服務(wù) root 用戶的密碼。
六、進(jìn)入到MySQL容器中
docker exec -it mysql-test /bin/bash
七、登錄MySQL
mysql -uroot -p123456
外部訪問Doker中的MySQL容器
1.使用Windows的cmd窗口遠(yuǎn)程連接
2.使用DataGrip 連接
3.使用navicat連接(由于navicat版本問題連接報錯
)
遠(yuǎn)程連接Docker中的MySQL容器注意事項(xiàng)
-
確保MySQL開放了遠(yuǎn)程連接的權(quán)限
執(zhí)行查詢語句,查看數(shù)據(jù)庫當(dāng)前的訪問權(quán)限的信息
select User,authentication_string,Host from user;
-
確保Docker宿主機(jī)防火墻開放了MySQL的端口號或者直接關(guān)閉防火墻
2.Docker應(yīng)用部署-部署Tomcat
-
案例需求:在Docker容器中部署Tomcat,并通過外部機(jī)器訪問Tomcat部署的項(xiàng)目。
-
案例實(shí)現(xiàn)步驟:
①搜索Tomcat鏡像
②拉取Tomcat鏡像
③創(chuàng)建容器
④部署項(xiàng)目
⑤測試訪問
Tomcat部署
一、搜索Tomcat鏡像
docker search tomcat
二、拉取Tomcat鏡像
docker pull tomcat
三、查看本地鏡像
docker images
四、在 /root 目錄下創(chuàng)建tomcat目錄用于存儲tomcat數(shù)據(jù)信息,進(jìn)入到tomcat目錄中
#創(chuàng)建tomcat目錄
mkdir tomcat
#進(jìn)入到tomcat目錄
cd tomcat
五、創(chuàng)建容器,設(shè)置端口映射、目錄映射
docker run -id \
-p 8080:8080 \
--name=tomcat-test \
-v $PWD:/usr/local/tomcat/webapps \
tomcat:latest
- 參數(shù)說明
- -p 8080:8080:將容器的8080端口映射到主機(jī)的8080端口
- -v $PWD:/usr/local/tomcat/webapps:將主機(jī)當(dāng)前目錄掛載到容器的webapps
六、部署項(xiàng)目
#創(chuàng)建test文件夾
mkdir test
#進(jìn)入到test目錄
cd test
#創(chuàng)建并編輯index.html文件
vim index.html
#index.html文件內(nèi)容
<h1> hellow tomcat docker </h1>
七、測試訪問
#打開瀏覽器,地址欄輸入ip地址:端口號/項(xiàng)目路徑
192.168.3.240:8080/test/index.html
3.Docker應(yīng)用部署-部署Nginx
-
案例需求:在Docker容器中部署Nginx,并通過外部機(jī)器訪問Nginx。
-
案例實(shí)現(xiàn)步驟:
①搜索Tomcat鏡像
②拉取Tomcat鏡像
③創(chuàng)建容器
④測試訪問
Nginx部署
一、搜索Nginx鏡像
docker search nginx
二、拉取Nginx鏡像
docker pull nginx
三、查看本地鏡像
docker images
四、在 /root 目錄下創(chuàng)建nginx目錄用于存儲nginx數(shù)據(jù)信息,進(jìn)入到nginx目錄中
#創(chuàng)建nginx目錄
mkdir nginx
#進(jìn)入到nginx目錄
cd nginx
五、在 /root/nginx/目錄下創(chuàng)建conf文件夾,進(jìn)入conf目錄創(chuàng)建并編輯nginx.conf文件,粘貼下面內(nèi)容
#創(chuàng)建conf目錄
mkdir conf
#進(jìn)入到conf目錄
cd conf
#創(chuàng)建并編輯nginx.conf文件
vim nginx.conf
nginx.conf文件內(nèi)容
user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
六、創(chuàng)建容器,設(shè)置端口映射、目錄映射
docker run -id \
-p 80:80 \
--name=nginx-test \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx:latest
- 參數(shù)說明
- -p 80:80:將容器的80端口映射到主機(jī)的80端口
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機(jī)當(dāng)前目錄下的/conf/nginx.conf掛載到容器的/etc/nginx/nginx.conf。配置目錄
- -v $PWD/logs:/var/log/nginx:將主機(jī)當(dāng)前目錄下的logs目錄掛載到容器的/var/log/nginx。日志目錄
七、測試訪問
#進(jìn)入到html目錄
cd html
#創(chuàng)建并編輯index.html文件
vim index.html
#index.html文件內(nèi)容
<h1> hellow nginx docker </h1>
瀏覽器訪問IP地址進(jìn)行測試
4.Docker應(yīng)用部署-部署Redis
-
案例需求:在Docker容器中部署Redis,并通過外部機(jī)器訪問Redis。
-
案例實(shí)現(xiàn)步驟:
①搜索Redis鏡像
②拉取Redis鏡像
③創(chuàng)建容器
④測試訪問
Redis部署
一、搜索Nginx鏡像
docker search redis
二、拉取Nginx鏡像
docker pull redis
三、查看本地鏡像
docker images
三、創(chuàng)建容器,設(shè)置端口映射
docker run -id --name=redis-test -p 6379:6479 redis:latest
四、連接redis
通過 redis-cli 連接測試使用 redis 服務(wù)。
#進(jìn)入redis-test容器
docker exec -it redis-test /bin/bash
#連接redis
redis-cli
五、Dockerfile
1.Dockerfile-鏡像原理
操作系統(tǒng)組成部分:
- 進(jìn)程調(diào)度子系統(tǒng)
- 進(jìn)程通信子系統(tǒng)
- 內(nèi)存管理子系統(tǒng)
- 設(shè)備管理子系統(tǒng)
- 文件管理子系統(tǒng)
- 網(wǎng)絡(luò)通信子系統(tǒng)
- 作業(yè)控制子系統(tǒng)
Linux文件系統(tǒng)由bootfs和rootfs兩部分組成
- bootfs:包含bootloader(引導(dǎo)加載程序)和kernel(內(nèi)核)
- rootfs:root文件系統(tǒng),包含的就是典型Linux系統(tǒng)中的/dev,/proc,/bin,/etc等標(biāo)準(zhǔn)目錄和文件
- 不同的linux發(fā)行版,bootfs基本一樣,而rootfs不同,如ubuntu,centos等
Docker鏡像原理
- Docker鏡像是由特殊的文件系統(tǒng)疊加而成
- 最底端是 bootfs,并使用宿主機(jī)的bootfs
- 第二層是 root文件系統(tǒng)rootfs,稱為base image
- 然后再往上可以疊加其他的鏡像文件
- 統(tǒng)一文件系統(tǒng)(Union File System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€文件系統(tǒng),為這些層提供了一個統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統(tǒng)。
- 一個鏡像可以放在另一個鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎(chǔ)鏡像
- 當(dāng)從一個鏡像啟動容器時,Docker會在最頂層加載一個讀寫文件系統(tǒng)作為容器
-
Docker鏡像的本質(zhì)是什么?
是一個分層文件系統(tǒng)
-
Docker中的一個centos鏡像為什么只有200M,而一個centos操作系統(tǒng)的iso文件要幾個G?
Centos的iso鏡像文件包含bootfs和rootfs,而Docker的centos鏡像復(fù)用操作系統(tǒng)的bootfs,只有rootfs和其他鏡像層
-
Docker中一個tomcat鏡像為什么又600MB,而一個tomcat安裝包只有70多MB?
由于docker中鏡像是分層的,tomcat雖然只有70多MB,但他需要依賴于父鏡像和基礎(chǔ)鏡像,所有整個對外暴露的tomcat鏡像大小600多MB
2.Dockerfile-容器轉(zhuǎn)為鏡像
-
Docker鏡像如何制作?
一.容器轉(zhuǎn)為鏡像
將容器轉(zhuǎn)為鏡像
docker commit 容器id 新的鏡像名稱:版本號
將鏡像轉(zhuǎn)為壓縮文件(容器沒辦法傳給其他人,只有將容器轉(zhuǎn)為壓縮文件才能進(jìn)行傳輸)
docker save -o 壓縮文件名稱 鏡像名稱:版本號
將壓縮文件轉(zhuǎn)為鏡像
docker load -i 壓縮文件名稱
例子
1.查看容器
docker ps -a
2.將容器轉(zhuǎn)為鏡像
docker commit 容器id 新的鏡像名稱:版本號
docker commit 2b9e6a802d93 tomcat-1:1.0
3.將鏡像轉(zhuǎn)為壓縮文件
docker save -o 壓縮文件名稱 鏡像名稱:版本號
docker save -o tomcat.tar tomcat-1:1.0
4.刪除鏡像
docker rmi 8a3fa5474e0f
5.將壓縮文件轉(zhuǎn)為鏡像
docker load -i 壓縮文件名稱
docker load -i tomcat.tar
二.dockerfile
3.Dockerfile-Dockerfile概述及關(guān)鍵字
-
什么是 Dockerfile?
Dockerfile 是一個用來構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明。
Dockerfile概念
- Dockerfile是一個文本文件
- 包含了一條條的指令
- 每一條指令構(gòu)建一層,基于基礎(chǔ)鏡像,最終構(gòu)建出一個新的鏡像
- 對開發(fā)人員:可以為開發(fā)團(tuán)隊(duì)提供一個完全一致的開發(fā)環(huán)境
- 對于測試人員:可以直接拿開發(fā)時所構(gòu)建的鏡像或者通過Dockerfile文件構(gòu)建一個新的鏡像開始工作了
Dockerfile 指令 | 說明 |
---|---|
FROM | 指定基礎(chǔ)鏡像,用于后續(xù)的指令構(gòu)建。 |
MAINTAINER | 指定Dockerfile的作者/維護(hù)者。(已棄用,推薦使用LABEL指令) |
LABEL | 添加鏡像的元數(shù)據(jù),使用鍵值對的形式。 |
RUN | 在構(gòu)建過程中在鏡像中執(zhí)行命令。 |
CMD | 指定容器創(chuàng)建時的默認(rèn)命令。(可以被覆蓋) |
ENTRYPOINT | 設(shè)置容器創(chuàng)建時的主要命令。(不可被覆蓋) |
EXPOSE | 聲明容器運(yùn)行時監(jiān)聽的特定網(wǎng)絡(luò)端口。 |
ENV | 在容器內(nèi)部設(shè)置環(huán)境變量。 |
ADD | 將文件、目錄或遠(yuǎn)程URL復(fù)制到鏡像中。 |
COPY | 將文件或目錄復(fù)制到鏡像中。 |
VOLUME | 為容器創(chuàng)建掛載點(diǎn)或聲明卷。 |
WORKDIR | 設(shè)置后續(xù)指令的工作目錄。 |
USER | 指定后續(xù)指令的用戶上下文。 |
ARG | 定義在構(gòu)建過程中傳遞給構(gòu)建器的變量,可使用 “docker build” 命令設(shè)置。 |
ONBUILD | 當(dāng)該鏡像被用作另一個構(gòu)建過程的基礎(chǔ)時,添加觸發(fā)器。 |
STOPSIGNAL | 設(shè)置發(fā)送給容器以退出的系統(tǒng)調(diào)用信號。 |
HEALTHCHECK | 定義周期性檢查容器健康狀態(tài)的命令。 |
SHELL | 覆蓋Docker中默認(rèn)的shell,用于RUN、CMD和ENTRYPOINT指令。 |
4.Dockerfile-案例-部署springboot項(xiàng)目
案例需求:
定義dockerfile,發(fā)布springboot項(xiàng)目
實(shí)現(xiàn)步驟
1.創(chuàng)建一個springboot項(xiàng)目
2.項(xiàng)目打包
注意事項(xiàng):
項(xiàng)目打包JDK版本要跟后面創(chuàng)建容器所依賴的父鏡像JDK版本一致,否者可能導(dǎo)致創(chuàng)建的容器無法運(yùn)行
3.jar包測試運(yùn)行
4.下載一個java鏡像,用來運(yùn)行jar包(根據(jù)自己的springboot打包所依賴的JDK版本一致)
注意事項(xiàng):
這里的java版本要與打包springboot的JDK版本一致,否者可能導(dǎo)致創(chuàng)建的容器無法運(yùn)行
docker pull java:8
5.創(chuàng)建一個名為 docker-files 的文件夾
mkdir docker-files
6.進(jìn)入到 docker-files 目錄下,上傳打包好的jar包
7.創(chuàng)建并編輯 springboot-dockerfile文件
vim springroot-dockerfile
文件內(nèi)容
FROM java:8
MAINTAINER xiongjian
ADD springboot-hello-0.0.1-SNAPSHOT.jar springboot-hello.jar
CMD java -jar springboot-hello.jar
- 說明
- 定義父鏡像:FROM java:8
- 定義作者信息:MAINTAINER xiongjian
- 將jar包添加到容器:ADD springboot-hello-0.0.1-SNAPSHOT.jar springboot-hello.jar
- 定義容器啟動執(zhí)行的命令:CMD java -jar springboot-hello.jar
8.通過 dockerfile 構(gòu)建鏡像
docker build -f 文件名 -t 鏡像名稱:鏡像標(biāo)簽 .
最后的
.
代表本次執(zhí)行的上下文路徑(上下文路徑,是指 docker 在構(gòu)建鏡像,有時候想要使用到本機(jī)的文件(比如復(fù)制),docker build 命令得知這個路徑后,會將路徑下的所有內(nèi)容打包。)
解析:由于 docker 的運(yùn)行模式是 C/S。我們本機(jī)是 C,docker 引擎是 S。實(shí)際的構(gòu)建過程是在 docker 引擎下完成的,所以這個時候無法用到我們本機(jī)的文件。這就需要把我們本機(jī)的指定目錄下的文件一起打包提供給 docker 引擎使用。
如果未說明最后一個參數(shù),那么默認(rèn)上下文路徑就是 Dockerfile 所在的位置。
注意:上下文路徑下不要放無用的文件,因?yàn)闀黄鸫虬l(fā)送給 docker 引擎,如果文件過多會造成過程緩慢。
docker build -f springroot-dockerfile -t springboot-hello .
8.創(chuàng)建運(yùn)行容器
docker run -id --name springboot-hello -p 9000:8080 springboot-hello:latest
9.外部測試
docker宿主機(jī)IP地址:端口號/訪問的項(xiàng)目
5.Dockerfile-案例-自定義centos
案例需求:
自定義centos7鏡像。要求:
1.默認(rèn)登錄路徑為/usr
2.可以使用vim
實(shí)現(xiàn)步驟
1.在 ~ 目錄下創(chuàng)建一個名為 docker-files 文件夾
mkdir docker-files
2.進(jìn)入 docker-files 目錄,創(chuàng)建即編輯 contos-dockerfile 文件
vim centos-dockerfile
文件內(nèi)容
FROM centos:7
MAINTAINER xiongjian
RUN yum -y install vim
WORKDIR /usr
CMD /bin/bash
- 說明
- 定義父鏡像:FROM java:8
- 定義作者信息:MAINTAINER xiongjian
- 執(zhí)行安裝vim命令:RUN yum -y install vim
- 定義默認(rèn)的工作目錄:WORKDIR /usr
- 定義容器啟動執(zhí)行的命令:CMD /bin/bash
3.構(gòu)建鏡像
docker build -f 文件名 -t 鏡像名稱:鏡像標(biāo)簽 .
docker build -f centos-dockerfile -t centos-test:1 .
4.創(chuàng)建運(yùn)行容器(如圖所示默認(rèn)登錄路徑為/usr)
docker run -it --name=centos-test centos-test:1
六、Docker服務(wù)編排
服務(wù)編排:
按照一定的業(yè)務(wù)規(guī)則批量管理容器
微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)中一般包含若干個微服務(wù),每個微服務(wù)一般都會部署多個實(shí)例,如果每個微服務(wù)都要手動啟停維護(hù)的工作量會很大。
- 要從Dockerfile build image 或者去dockerhub拉取 image
- 要創(chuàng)建多個container
- 要管理這些container(啟動停止刪除)
1.Docker Compose-概述
Docker Compose簡介
DockerCompose是一個編排多容器分布式部署的工具,提供命今集管理容器化應(yīng)用的完整開發(fā)周期,包括服務(wù)構(gòu)建啟動和停止。
Compose 是用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具。通過 Compose,您可以使用 YML 文件來配置應(yīng)用程序需要的所有服務(wù)。然后,使用一個命令,就可以從 YML 文件配置中創(chuàng)建并啟動所有服務(wù)。
Compose 使用的三個步驟:
- 使用 Dockerfile 定義應(yīng)用程序的環(huán)境。
- 使用 docker-compose.yml 定義構(gòu)成應(yīng)用程序的服務(wù),這樣它們可以在隔離環(huán)境中一起運(yùn)行。
- 最后,執(zhí)行 docker-compose up 命令來啟動并運(yùn)行整個應(yīng)用程序。
2.Docker Compose-安裝使用
Docker Compose 安裝
1.安裝Compose
Linux 上我們可以從 Github 上下載它的二進(jìn)制包來使用,最新發(fā)行的版本地址:https://github.com/docker/compose/releases
運(yùn)行以下命令以下載 Docker Compose 的當(dāng)前穩(wěn)定版本:
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
要安裝其他版本的 Compose,請?zhí)鎿Q 1.8.1。
2.設(shè)置文件可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose
3.測試是否安裝成功
docker-compose version
Docker Compose卸載
二進(jìn)制包方式安裝的,刪除二進(jìn)制文件即可
rm /usr/local/bin/docker-compose
3.使用Docker Compose編排nginx+springboot項(xiàng)目
-
準(zhǔn)備nginx鏡像和springboot項(xiàng)目鏡像(springboot項(xiàng)目鏡像可以查看上面的部署springboot案例)
-
~ 目錄下創(chuàng)建一個名為 docker-compose 的文件夾并進(jìn)入到 docker-compose 目錄下
mkdir docker-compose cd docker-compose/
-
創(chuàng)建并編輯名為 docker-compose.yml 文件
vim docker-compose.yml
docker-compose.yml文件內(nèi)容
version: '2' services:nginx:image: nginxports:- 80:80links:- springboot-hellovolumes:- ./nginx/conf.d:/etc/nginx/conf.dspringboot-hello:image: springboot-helloexpose:- "8080"
注意事項(xiàng):
version: ‘2’ 這里的版本要根據(jù) docker-compose 版本所對應(yīng),否者后面使用 docker-compose 啟動容器會報錯 -
創(chuàng)建 ./nginx/conf.d 目錄 ,進(jìn)入到 ./nginx/conf.d 目錄下
mkdir -p ./nginx/conf.d cd nginx/conf.d/
-
創(chuàng)建nginx配置文件并添加內(nèi)容
vim nginx.conf
nginx.conf 文件內(nèi)容
server {listen 80;access_log off;location / {proxy_pass http://springboot-hello:8080;}}
-
切換到 ~/docker-compose/ 目錄下,使用 docker-compose 啟動容器
cd ~/docker-compose/ docker-compose up
-
重新打開一個新的會話查看容器會發(fā)現(xiàn)啟動了兩個容器
docker ps -a
-
測試訪問
七、Docker私有倉庫
Docker官方的 Docker hub(https://hub.docker.com)是一個用于管理公共鏡像的倉庫,我們可以從上面拉取鏡像到本地,也可以把我們自己的鏡像推送上去。但是,有時候我們的服務(wù)器無法訪問互聯(lián)網(wǎng),或者你不希望將自己的鏡像放到公網(wǎng)當(dāng)中,那么我們就需要搭建自己的私有倉庫來存儲和管理自己的鏡像。
1.Docker私有倉庫-搭建
-
拉取私有倉庫鏡像
docker pull registry
-
啟動私有倉庫容器
docker run -id --name=registry -p 5000:5000 registry
-
訪問私有倉庫
打開瀏覽器,輸入地址
http://私有倉庫服務(wù)器ip:5000/v2/_catalog
,看到 {“repositories”:[]} 表示私有倉庫搭建成功 -
修改daemon.json配置文件
vim /etc/docker/daemon.json
在上述文件中添加一個key,保存退出。此步用于讓docker信任私有倉庫地址;注意將私有倉庫服務(wù)器ip修改為自己私有倉庫服務(wù)器真實(shí)ip
添加的內(nèi)容
"insecure-registries": ["私有倉庫服務(wù)器ip:5000"]
-
重啟 docker 服務(wù)
systemctl restart docker
-
私有倉庫容器
重啟docker服務(wù)導(dǎo)致私有倉庫容器停止所以需要啟動下私有倉庫容器
docker start registry
2.Docker私有倉庫-上傳鏡像
-
標(biāo)記鏡像為私有倉庫的鏡像
docker tag centos:7 私有倉庫服務(wù)器IP:5000/centos:7
-
上傳標(biāo)記的鏡像
docker push 私有倉庫服務(wù)器IP:5000/centos:7
-
訪問測試私有倉庫
3.Docker私有倉庫-拉取鏡像
-
刪除鏡像
docker rmi 192.168.3.240:5000/centos:7
-
拉取鏡像
docker pull 192.168.3.240:5000/centos:7
八、Docker相關(guān)概念
1.Docker和虛擬機(jī)比較
Docker容器虛擬化 與 傳統(tǒng)虛擬機(jī)比較
容器就是將軟件打包成標(biāo)準(zhǔn)化單元,以用于開發(fā)、交付和部署。
- 容器鏡像是輕量的、可執(zhí)行的獨(dú)立軟件包,包含軟件運(yùn)行所需的所有內(nèi)容:代碼、運(yùn)行時環(huán)境、系統(tǒng)工具、系統(tǒng)庫和設(shè)置。
- 容器化軟件在任何環(huán)境中都能夠始終如一地運(yùn)行。
- 容器賦予了軟件獨(dú)立性,使其免受外在環(huán)境差異的影響,從而有助于減少團(tuán)隊(duì)間在相同基礎(chǔ)設(shè)施上運(yùn)行不同軟件時的沖突。
相同
容器和虛擬機(jī)具有相似的資源隔離和分配優(yōu)勢
不同
- 容器虛擬化的是操作系統(tǒng),虛擬機(jī)虛擬化的是硬件。
- 傳統(tǒng)虛擬機(jī)可以運(yùn)行不同的操作系統(tǒng),容器只能運(yùn)行同一類型操作系統(tǒng)
特性 | 容器 | 虛擬機(jī) |
---|---|---|
啟動 | 秒級 | 分鐘級 |
硬盤使用 | 一般為MB | 一般為GB |
性能 | 接近原生 | 弱于 |
系統(tǒng)支持量 | 單機(jī)支持上千個容器 | 一般幾十個 |
九、Docker參考手冊
Docker 資源匯總:https://www.runoob.com/docker/docker-resources.html
Docker命令大全:https://www.runoob.com/docker/docker-command-manual.html
此文檔來源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除!