一、Linux(CentOS7) 上安裝 docker
1、docker 是什么?
docker 是一種 虛擬化容器技術,一個開源的應用容器引擎。
基於鏡像,可以秒級啟動各種容器(運行一次鏡像就生成一個容器,類似於 Java 中 類與對象)。
各容器間相互隔離,且每個容器均是一個完整的運行環境。
可以很方便的讓開發者打包應用以及相關依賴包到一個可移植的輕量級的容器中,並發布到 Linux 上。
參考地址:
https://www.cnblogs.com/l-y-h/p/11337051.html
https://docs.docker.com/
https://www.runoob.com/docker/docker-tutorial.html
2、安裝
(1)官方文檔地址:
https://docs.docker.com/
(2)找到官方文檔位置,根據文檔一步步執行即可。
Step1:進入官網,選擇 Get Docker,並選擇 Docker for Linux。

Step2:選擇 相應的 Linux 系統,此處我選擇 CentOS.

(3)安裝流程
Step1:卸載舊版本。
查看當前系統是否有 docker 舊版本存在,存在則刪除舊版本。
【方式一:(先查找是否存在,再刪除)】 rpm -qa | grep docker 【方式二:(直接刪除,不管是不是存在,root 用戶不需要輸入 sudo)】 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine

Step2:安裝 Docker 倉庫。
使用 Docker 倉庫進行安裝,用來簡化安裝、升級等操作。也可采用 RPM 方式手動安裝。
所需軟件包:
yum-config-manager 需要 yum-util。
device mapper 存儲驅動程序 需要 device-mapper-persistent-data、 lvm2。
【安裝所需軟件包:(yum-utils、device-mapper-persistent-data、lvm2)】 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 【設置穩定的倉庫(用於下載 docker):】 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

Step3:安裝社區版的 Docker(Docker Engine-Community)
安裝最新版本的 Docker Engine-Community 和 containerd.
【安裝最新的 Docker:】 sudo yum install docker-ce docker-ce-cli containerd.io 【查看當前版本,若有版本數據,則安裝成功】 docker -v

Step4:啟動 docker,並檢查是否成功啟動。
【啟動、關閉 docker:(方式一)】 sudo systemctl start docker sudo systemctl stop docker 【啟動、關閉 docker:(方式二)】 sudo service docker start sudo service docker stop 【檢查是否啟動成功:(方式一,查看本地鏡像)】 sudo docker images 【檢查是否啟動成功:(方式二,運行 hello-world 鏡像)】 sudo docker run hello-world

Step5:設置開機自啟動。
每次開機都得重新輸入命令用於啟動 docker,很麻煩,所以一般設置開機自啟動。
【查看是否開機自啟動:】 systemctl list-unit-files | grep enable 或者 systemctl list-unit-files | grep docker 【開機自啟動:】 sudo systemctl enable docker

(4)配置鏡像加速(此處使用 阿里雲鏡像)
默認下載地址比較慢(dockerhub),使用鏡像加速可以提高軟件下載速度。
Step1:登陸 阿里雲官網,然后點擊 控制台。

Step2:進入控制台,點擊列表框,選擇產品服務中的 容器鏡像服務。

Step3:進入 容器鏡像服務后,選擇鏡像加速器,按照步驟操作即可。

Step4:配置鏡像加速器。
【加速器地址:】 https://y5krm9wr.mirror.aliyuncs.com 【修改配置文件:】 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://y5krm9wr.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

二、常用命令 -- 鏡像倉庫管理相關命令
用於從 遠程鏡像倉庫下載鏡像到本地。
1、docker pull(從鏡像倉庫中拉取指定的鏡像)
【格式:】 docker pull [選項] 鏡像名[:版本號] 選項: -a 拉取所有鏡像 注: :版本號 可以不存在,不存在時,獲取最新的鏡像。 【舉例:】 docker pull mysql:8.0.19

2、docker search(從 Dcoker Hub 中查找鏡像)
【格式:】 docker search [選項] 鏡像名 選項: -s 指定數 顯示 stars 不小於 指定數的鏡像。 【舉例:】 docker search -s 20 mysql

三、常用命令 -- 本地鏡像管理命令
用於管理本地的鏡像。
1、docker images(列出本地鏡像列表)
【格式:】 docker images [選項] [鏡像名] 選項: -a 列出所有鏡像 -q 只顯示鏡像 ID(IMAGE ID) --no-trunc 顯示完整的鏡像信息 --digests 顯示鏡像摘要信息 【舉例:】 [root@localhost ~]# docker images mysql [root@localhost ~]# docker images --no-trunc

2、docker rmi(刪除鏡像)
【格式:】 docker rmi [選項] 鏡像名 選項: -f 強制刪除 【舉例:】 docker rmi tomcat

3、docker tag(標記本地鏡像,將其歸入某個倉庫)
相當於一個鏡像的不同名字。
【格式:】
docker tag 原鏡像名 新鏡像名
【舉例:】
[root@localhost ~]# docker tag tomcat:latest mytomcat

四、常用命令 -- 管理容器的生命周期命令
運行一個鏡像,就可以生成一個 容器,容器內部是一個完整的運行環境。
一個鏡像可以生成多個容器,類似於 Java 中 類 與 對象的關系。
需要對各個容器進行管理。
1、docker run(創建一個容器並運行)
【格式:】 docker run [選項] 鏡像文件名 選項: -d 指在后台運行容器,返回容器 ID。 -i 以交互模式運行容器,通常與 -t 連用(即 -it)。 -t 為容器分配一個偽輸入終端。 -P 隨機端口映射,將容器內部端口隨機映射到主機的端口 -p 指定端口映射,將容器內部端口映射到主機指定端口,格式:-p 主機端口:容器端口 --name 指定啟動容器的名字,格式: --name 容器名 -e 指定環境變量,格式:-e 環境變量名=環境變量值 -v 文件掛載,將容器內部文件與主機文件綁定,格式 -v 主機文件路徑:容器文件路徑 【舉例:】 docker run --name mysqlDemo -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0.19 上面命令為: docker run mysql:8.0.19 執行 mysql:8.0.19 版本的鏡像,生成一個容器 --name mysqlDemo 容器命名為 mysqlDemo -d 后台運行 -e MYSQL_ROOT_PASSWORD=123456 設置登陸密碼為 123456,登陸用戶為 root -p 3306:3306 將容器內部 3306 端口映射到 主機的 3306 端口,即通過 主機的 3306 可以訪問容器的 3306 端口

2、docker start/stop/restart(啟動、關閉、重啟容器)
【docker start 格式:】
docker start 容器名
【docker stop 格式:】
docker stop 容器名
【docker restart 格式:】
docker restart 容器名
【舉例:】
[root@localhost ~]# docker stop mysql

3、docker kill(殺掉一個正在運行的容器)
【格式:】 docker kill [選項] 容器名 選項: -s 向容器發送一個信號 【舉例:】 [root@localhost ~]# docker kill mysqlDemo

4、docker rm(刪除容器)
【格式:】 docker rm [選項] 容器名 選項: -f 強制刪除一個運行中的容器 -v 刪除與容器相關聯的 卷 【舉例:】 [root@localhost ~]# docker rm -f mysqlDemo

5、docker create(創建一個容器,但不啟動容器)
【格式:】 docker create [選項] 鏡像名 選項基本與 docker run 一樣(沒有 -d)。 【舉例:】 [root@localhost ~]# docker create --name mysqlDemo1 -e MYSQL_ROOT_PASSWORD=123456 -p 3312:3306 mysql:8.0.19

6、docker exec(在運行的容器中執行命令)
【格式:】 docker exec [選項] 容器名 命令 選項: -d 以分離模式在后台運行。 -i 以交互模式運行容器,通常與 -t 連用(即 -it)。 -t 為容器分配一個偽輸入終端。 【舉例:】 [root@localhost ~]# docker exec -it mysql /bin/bash

五、常用命令 -- 查看容器信息命令
1、docker ps(查看當前容器列表)
【格式:】 docker ps [選項] 選項: -a 顯示所有容器,包括未運行的容器 -l 顯示最近創建的容器 -n 指定數 顯示最近創建的 指定數 的容器。比如: -n 7,顯示最近創建的 7 個容器 -q 只顯示容器 ID 【舉例:】 [root@localhost ~]# docker ps -an 10

2、docker top(查看容器中運行的進程信息)
【格式:】
docker top 容器名
【舉例:】
[root@localhost ~]# docker top mysql

3、docker logs(獲取容器的日志)
【格式:】 docker logs [選項] 容器名 選項: -f 跟蹤日志輸出 --tail 顯示最新的 n 條日志,格式: --tail=指定數 -t 顯示時間戳 【舉例:】 [root@localhost ~]# docker logs --tail=10 mysql

4、docker port(查看映射端口)
【格式:】
docker port 容器名
【舉例:】
docker port mysql

5、docker info(顯示 docker 系統信息)
【格式:】 docker info 【舉例:】 [root@localhost ~]# docker info

6、docker version、docker -v(顯示 docker 版本信息)
【格式:】 docker version docker -v 【舉例:】 [root@localhost ~]# docker version [root@localhost ~]# docker -v

六、Docker 上安裝 mysql 8.0.19 鏡像
1、查找 想要安裝的 mysql 版本
【方式一:官網搜索】 https://hub.docker.com/ https://hub.docker.com/_/mysql?tab=tags 【方式二:(通過命令行查詢)】 docker search mysql


2、下載鏡像
通過官網地址,可以查看到 想要下載的版本,使用 pull 命令拉取鏡像即可.
此處我選擇 8.0.19 版本的 mysql。
如果沒有 設置版本,則會自動下載最新的版本(即 docker pull mysql 會下載最新的版本 latest)。
【命令行下載:】 docker pull mysql:8.0.19 【查看鏡像是否成功下載:(即查看本地鏡像)】 docker images

3、運行容器
【運行容器:】 docker run -p 3306:3306 --name mysql \ -v /usr/mydata/mysql/log:/var/log/mysql \ -v /usr/mydata/mysql/data:/var/lib/mysql \ -v /usr/mydata/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.19 分析: docker run -d mysql:8.0.19 以后台的方式運行 mysql 8.0.19 版本的鏡像,生成一個容器。 --name mysql 容器名為 mysql -e MYSQL_ROOT_PASSWORD=123456 設置登陸密碼為 123456,登陸用戶為 root -p 3306:3306 將容器內部 3306 端口映射到 主機的 3306 端口,即通過 主機的 3306 可以訪問容器的 3306 端口 -v /usr/mydata/mysql/log:/var/log/mysql 將容器的 日志文件夾 掛載到 主機的相應位置 -v /usr/mydata/mysql/data:/var/lib/mysql 將容器的 數據文件夾 掛載到 主機的相應位置 -v /usr/mydata/mysql/conf:/etc/mysql/conf.d 將容器的 自定義配置文件夾 掛載到主機的相應位置 【查看容器是否啟動:】 docker ps -a


4、使用
【本機使用:(使用交互式方式進入)】 docker exec -it mysql /bin/bash 【外部訪問:(訪問主機的 3306 端口即可)】 ifconfig 可以查看 主機的 ip 地址(比如連接 :192.168.217.129:3306)


5、修改配置文件(比如修改默認字符集)
在啟動過程中,已經將 /etc/mysql/conf.d 掛載到了 /usr/mydata/mysql/conf 上,所以在 /usr/mydata/mysql/conf 目錄下 新建一個 my.cnf 文件,並添加配置信息,即可修改 mysql 容器的配置。
【查看 當前 mysql 的字符集:】 show variables like "%character%";
初始字符集。

創建 /usr/mydata/mysql/conf/my.cnf ,並重啟容器。
【在 /usr/mydata/mysql/conf 下新建一個 my.cnf 文件】 [client] # 設置字符集為 utf-8 default-character-set=utf8 [mysql] # 設置字符集為 utf-8 default-character-set=utf8 [mysqld] # 設置登陸用戶 # user=root # 設置字符集編碼為 utf-8 character-set-server=utf8 【重啟容器】 docker restart mysql

七、Docker 安裝 Redis
1、查找需要安裝的鏡像
【方式一:官網搜索】 https://hub.docker.com/ https://hub.docker.com/_/redis?tab=tags 【方式二:(通過命令行查詢)】 docker search redis

2、下載鏡像
【下載最新的鏡像:】
docker pull redis

3、運行容器
【運行容器:】 使用 docker run -v 掛載文件時,若想掛載文件,需要先在主機上創建文件,否則會當成目錄掛載。 mkdir -p /usr/mydata/redis/conf touch /usr/mydata/redis/conf/redis.conf 需要使用 redis-server /etc/redis/redis.conf 指定配置文件啟動 redis。 docker run -p 6379:6379 --name redis \ -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /usr/mydata/redis/conf/data:/data \ -d redis redis-server /etc/redis/redis.conf 分析: docker run -d redis 運行 redis 最新鏡像,並生成一個容器 --name redis 容器名為 redis -p 6379:6379 指定端口映射,容器的 6379 端口映射到 主機的 6379 端口, -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf 掛載 redis 的配置文件到主機的指定位置 -v /usr/mydata/redis/conf/data:/data 掛載 redis 的數據到主機的指定位置 redis-server /etc/redis/redis.conf 表示根據 /etc/redis/redis.conf 配置文件啟動。

4、使用
【使用交互式方式進入 redis 容器】 docker exec -it redis /bin/bash 【使用交互式方式 打開 redis-cli】 docker exec -it redis redis-cli

5、修改配置文件(比如數據持久化)
使用默認配置文件啟動 redis 時,數據不會持久化(即 appendonly = no)。
當 redis 重啟后,數據就會丟失。

修改配置文件,添加數據持久化(即 appendonly = yes)。
【編輯 /usr/mydata/redis/conf/redis.conf】 vim /usr/mydata/redis/conf/redis.conf appendonly yes

八、Docker 安裝 Nginx
參考地址:
https://www.cnblogs.com/l-y-h/p/12844824.html#_label3
九、Docker 數據卷、自定義鏡像(DockerFile)、Docker-Compose
1、數據卷
(1)什么是 Docker 數據卷?
【數據卷:】
數據卷本質就是磁盤中的某個目錄,其可以與 Docker 容器中某個目錄相關聯。
可以 理解成 將宿主機的一個目錄 映射 到 容器的某個目錄中。
【為什么使用 數據卷:】
Docker 通過鏡像啟動一個容器后,容器會產生一些數據,如果不對這些數據進行處理,當容器被刪除后,數據將會丟失。
可以將這些數據 映射 到 數據卷中,這樣就可以保存在 磁盤。
再次啟動容器后,可以掛載到 數據卷,從而獲取數據(實現數據持久化、共享等)。
且 操作 數據卷中的數據,容器數據也會隨之變化,大大提高修改、查看數據的效率(不用進入容器內部)。
(2)數據卷常用命令
【創建數據卷:】 docker volume create 數據卷名稱 注: 創建數據卷后,數據默認會存放在 /var/lib/docker/volumes/數據卷名稱/_data 目錄下。 比如: docker volume create testVolume 會創建一個 /var/lib/docker/volumes/testVolume/_data/ 目錄。 【查看數據卷詳細信息:】 docker volume inspect 數據卷名稱 比如: docker volume inspect testVolume 【查看全部數據卷:】 docker volume ls 【輸出數據卷:】 docker volume rm 數據卷名稱 比如: docker volume rm testVolume

(3)數據卷 映射到 容器目錄中
【格式:】 -v 數據卷:容器內部指定目錄 注: 將數據卷 映射到 容器指定目錄 【方式一:(不推薦)】 docker run 鏡像ID(鏡像名)-v 數據卷名稱:容器內部指定目錄 注: 當 數據卷不存在時,Docker 會自動創建,且將容器內部自帶文件存放在 默認路徑中。 比如: docker run -d mysql:8.0.19 -v mysqlLog:/var/log/mysql 【方式二:(推薦)】 docker run 鏡像ID(鏡像名)-v 磁盤路徑:容器內部指定目錄 注: 直接指定磁盤路徑作為數據卷時,路徑下是空的。 比如: docker run -d mysql:8.0.19 v /usr/mydata/mysql/log:/var/log/mysql
(4)補充命令
docker stop $(docker ps) 查詢所有容器並停止。 【cp 從主機 復制文件到 容器中】 docker cp 磁盤目錄(文件) 容器名:容器目錄(文件) 注: 將文件從磁盤目錄 復制到 容器目錄中。 比如: docker cp test2.txt mysql2:/var/log/mysql 將當前目錄下 test2.txt 復制到 mysql2 容器的 /var/log/mysql 目錄下。
2、自定義鏡像(Dockerfile)
(1)說明
Docker 倉庫中存在各種各樣的鏡像,每次下載同一個鏡像后,還得重新配置一遍,非常麻煩。
可以通過 Dockerfile 文件自定義鏡像,按照指令 構建鏡像。
(2)Dockerfile 常用指令
【FROM(from)】 指定當前鏡像 是基於 哪個鏡像創建的。 格式: from 鏡像 比如: from mysql:8.0.19 此鏡像基於 mysql:8.0.19 構建 【RUN(run)】 容器構建(docker build)時需要運行的命令。 格式: run 命令一 && 命令二 run ["文件", "參數一", "參數二"] 比如: run echo '開始構建鏡像 ========== ' && echo ' ========== 開始構建鏡像' 【CMD(cmd)】 指定容器啟動(docker run)時運行的命令。 若存在多個 CMD,則以最后一個 CMD 為主。 可以被 docker run 傳入的參數覆蓋。 格式: cmd 命令 cmd ["命令", "參數1", "參數2"] cmd ["參數1", "參數2"] 此寫法作為 ENTRYPOINT 的默認參數 比如: cmd echo '開始啟動容器 ========== ' && echo ' ========== 開始啟動容器' 【ENTRYPOINT(entrypoint)】 類似於 cmd,但是其不會被 docker run 傳入的參數覆蓋(但是若使用了 --entrypoint 的參數可以覆蓋)。 格式: entrypoint 命令 entrypoint ["命令", "參數1", "參數2"] 比如: entrypoint ["echo", "hello"] cmd ["world"] 注: 此時,若 docker run 不傳入任何參數時,則 cmd 將作為 entrypoint 參數, 即 entrypoint ["echo", "hello", "world"] 【COPY(copy)】 將 指定文件或目錄 復制到 鏡像中的指定位置。 格式: copy src desc 比如: copy test.txt /root/test 將當前目錄下 test.txt 復制到 容器 /root/test 目錄下 【ADD(add)】 將 指定文件或目錄 復制到 鏡像中的指定位置。 會自動處理 URL 以及 解壓 tar 文件。 格式: add src desc 比如: add test2.txt /root/test 將當前目錄下 test.txt 復制到 容器 /root/test 目錄下 【MAINTAINER(maintainer)】 設置維護者信息(姓名、郵箱等) 格式: maintainer 數據1 數據2 比如: maintainer lyh lyh@163.com 設置維護者 姓名、郵箱 【EXPOSE(expose)】 設置當前容器對外暴露的端口號。 格式: expose port1 port2 比如: expose 8080 容器對外暴露端口號為 8080 【ENV(env)】 設置環境變量。 格式: env key value 比如: env map helloworld 通過 $map 可以獲取環境變量值為 helloworld 【WORKDIR(workdir)】 指定鏡像默認的工作目錄。 格式: workdir 目錄 比如: workdir /root/work 【VOLUME(volume)】 定義默認數據卷,若啟動容器時忘記通過 -v 進行數據卷映射到 容器目錄,將會自動掛載到 默認數據卷。 持久書數據,避免數據丟失。 格式: volume 路徑 volume ["路徑1", "路徑2"]
(3)制作鏡像
將編寫好的 Dockerfile 文件以及需要復制的文件 制作成鏡像。
【docker build】 docker build -t 鏡像名稱 . 或者 docker build -t 鏡像名稱[:tag] . 注: 命令末尾的點 . 指的是 上下文路徑(為 Dockerfile 文件所在位置)。 docker 構建鏡像時 會 將上下文路徑中所有的文件 進行打包(所以此路徑下不要放置無關文件)。
(4)Dockerfile 編寫舉例 以及 使用 docker build 自定義鏡像。
一般都是新建一個空目錄 來進行 自定義鏡像操作,避免打包不必要的文件。
創建一個名為 Dockerfile 的文件(文件名不一致將導致 docker build 出錯)。
【Dockerfile:】 # 設置基礎鏡像 from mysql:8.0.19 # 設置維護者信息 maintainer lyh lyh@163.com # docker build 時會觸發, run echo '開始構建鏡像 ========== ' && echo ' ========== 開始構建鏡像' # docker run 時會觸發 entrypoint ["echo", "啟動鏡像"] cmd ["hello world"] # 將當前目錄下的 test.txt 復制到 /root/test 目錄下 copy test.txt /root/test # 將當前目錄下的 test2.txt 復制到 /root/test 目錄下 add test2.txt /root/test # 對外暴露端口為 8080 expose 8080 # 設置環境變量 env map helloworld run echo $map # 指定容器默認工作目錄 workdir /root/work # 指定默認數據卷路徑 volume /var/lib/docker/volumes/defaultVolume 【構建自定義鏡像:】 docker build -t customize_mysql . 【查看當前自定義鏡像信息:】 docker inspect customize_mysql




3、Docker-Compose 管理容器
(1)說明
使用 docker run 啟動一個容器時,需要配置上大量參數,當配置集群 或者 需要啟動多個容器時 時,若一個一個去啟動,那工作量將變得很大,且容易出錯。
使用 Docker-Compose 可以進行容器的管理。其通過 docker-compose.yml 文件去維護容器參數信息。通過該 yml 文件可以很方便的 管理、啟動 容器。
(2)下載、安裝
【官方地址:】 github 地址: https://github.com/docker/compose 文檔地址:https://docs.docker.com/compose/ 安裝文檔地址:https://docs.docker.com/compose/install/ 【下載:(此處為 1.27.4 版本,若需要其他版本,替換即可)】 curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 注: 此方式下載速度較慢,可以去 github 上找到對應版本 下載到本地后 再發送到 服務器上。 【給下載后的 docker-compose 添加可執行權限】 chmod +x /usr/local/bin/docker-compose 【查看 docker 以及 docker-compose 版本號:】 docker -v docker-compose -v 【查看環境變量:(非必須操作)】 echo $PATH 可以查看當前環境變量 which 指令 比如:which docker 可以查看 docker 指令所在目錄 注: 若 docker-compose 不在環境變量中,可以進行配置(方便在任意目錄執行 docker-compose)。 打開 /etc/profile 文件,在 PATH 中追加指令所在目錄即可。 比如: vim /etc/profile export PATH="/usr/local/bin/:$PATH" source /etc/profile


(3)docker-compose 命令
執行 docker-compose 命令時,默認會在當前目錄下找 docker-compose.yml 文件。
【基於 docker-compose.yml 文件啟動容器:】 docker-compose up -d 注: -d 表示后台執行 【關閉並刪除 docker-compose 維護的容器:】 docker-compose down 【開啟、關閉、重啟 已存在的 docker-compose 維護的容器:】 docker-compose start docker-compose stop docker-compose restart 【查看由 docker-compose 管理的容器:】 docker-compose ps 【查看日志:】 docker-compose logs -f
(4)docker-compose.yml 常用參數
yml 編寫時 需要注意 縮進 以及 空格(不要使用 Tab 鍵,容易出錯)。
【docker-compose.yml】 # 指定 compose 文件版本,與 docker 兼容,高版本的 docker 一般使用 3.x。 version: '3.7' # 定義需要管理的 所有服務 信息 services: # 此處指的是服務的名稱 mysqlService: # 指定構建鏡像的上下文路徑(一般與 Dockerfile 一起使用)。 # build: # # 指定 Dockerfile 所在路徑 # context: ../ # # 指定 Dockerfile 名稱(默認為 Dockerfile) # dockerfile: Dockerfile # 指定容器的名稱(等同於 docker run --name) container_name: mysql2 # 指定鏡像路徑(可以是遠程倉庫鏡像 或者 本地鏡像) image: mysql:8.0.19 # 設置環境變量 environment: # 設置 MySQL 登陸用戶為 root,登陸密碼為 123456 MYSQL_ROOT_PASSWORD: 123456 # 指定時區 TZ: Asia/Shanghai # 定義 宿主機 與 容器的端口映射 ports: - 3307:3306 # 定義 宿主機 與 容器的數據卷映射 volumes: - /usr/mydata/mysql/log:/var/log/mysql - /usr/mydata/mysql/data:/var/lib/mysql - /usr/mydata/mysql/conf:/etc/mysql/conf.d # 定義容器重啟策略,no 表示任何情況下都不重啟(默認),always 表示總是重新啟動。 # 若使用 swarm 集群模式,需使用 restart_policy 替代 restart restart: always



(5)docker-compose 配合 Dockerfile 使用
使用 docker-compose.yml 文件 以及 Dockerfile 文件,在生成自定義鏡像的 同時 啟動當前鏡像,並由 docker-compose 維護、管理。
docker-compose.yml 文件通過 build 參數可以找到 Dockerfile 文件。
【Dockerfile】 from mysql:8.0.19 【docker-compose.yml】 # 指定 compose 文件版本,與 docker 兼容,高版本的 docker 一般使用 3.x。 version: '3.7' # 定義需要管理的 所有服務 信息 services: # 此處指的是服務的名稱 mysqlService: # 指定構建鏡像的上下文路徑(一般與 Dockerfile 一起使用)。 build: # 指定 Dockerfile 所在路徑 context: ../ # 指定 Dockerfile 名稱(默認為 Dockerfile) dockerfile: Dockerfile # 指定容器的名稱(等同於 docker run --name) container_name: mysql2 # 指定鏡像路徑(可以是遠程倉庫鏡像 或者 本地鏡像) image: mysql:8.0.19 # 設置環境變量 environment: # 設置 MySQL 登陸用戶為 root,登陸密碼為 123456 MYSQL_ROOT_PASSWORD: 123456 # 指定時區 TZ: Asia/Shanghai # 定義 宿主機 與 容器的端口映射 ports: - 3307:3306 # 定義 宿主機 與 容器的數據卷映射 volumes: - /usr/mydata/mysql/log:/var/log/mysql - /usr/mydata/mysql/data:/var/lib/mysql - /usr/mydata/mysql/conf:/etc/mysql/conf.d # 定義容器重啟策略,no 表示任何情況下都不重啟(默認),always 表示總是重新啟動。 # 若使用 swarm 集群模式,需使用 restart_policy 替代 restart restart: always


