操作docker進(jìn)程:
- 啟動(dòng)docker: systemctl start docker
- 停止docker: systemctl stop docker
- 重啟docker: systemctl restart docker
- 查看docker狀態(tài): systemtcl status docker
操作docker鏡像:
-
查看本地鏡像: docker images
image.png -
搜索鏡像: docker search 鏡像名稱
image.png -
下載docker鏡像: docker pull 鏡像名稱:版本
image.png -
刪除鏡像: docker rmi 鏡像id/名字:版本
image.png - 根據(jù)現(xiàn)有容器構(gòu)造出鏡像:docker commit -m "注釋" -a="作者" 容器id 鏡像名字:版本號(hào)
- 發(fā)布鏡像到遠(yuǎn)端:docker login / docker tag / docker push
操作docker容器:
- 通過鏡像創(chuàng)建并啟動(dòng)容器:
docker run -it --name=c1 centos:7
docker run -id --name=c1 centos:7
-i:保持容器運(yùn)行。通常與 -t 同時(shí)使用。加入it這兩個(gè)參數(shù)后,容器創(chuàng)建后自動(dòng)進(jìn)入容器中,退出容器后,容器自動(dòng)關(guān)閉。
-t:為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用。
-d:以守護(hù)(后臺(tái))模式運(yùn)行容器。創(chuàng)建一個(gè)容器在后臺(tái)運(yùn)行,需要使用docker exec 進(jìn)入容器。退出后,容器不會(huì)關(guān)閉。
-it 創(chuàng)建的容器一般稱為交互式容器, -id 創(chuàng)建的容器一般稱為守護(hù)式容器
--name:為創(chuàng)建的容器命名。 -
查看正在運(yùn)行的容器: docker ps
-a: 查看歷史運(yùn)行過的容器
image.png - 停止容器: docker stop 容器名稱
- 啟動(dòng)容器: docker start 容器名稱
- 刪除容器: docker rm 容器名字/id
- 查看容器信息: docker inspect 容器名稱
- 進(jìn)入容器: docker exec -it 名字,exit后容器不會(huì)關(guān)閉
- 查看容器日志: docker logs id; docker logs -f --tail=100 id
- 查看容器內(nèi)運(yùn)行的進(jìn)程:docker top id
- 查看容器內(nèi)部細(xì)節(jié):docker inspect id
- 拷貝容器內(nèi)文件到宿主機(jī):docker cp id:path path
數(shù)據(jù)卷:
數(shù)據(jù)卷是宿主機(jī)中的一個(gè)目錄或文件
當(dāng)容器目錄和數(shù)據(jù)卷目錄綁定后,對(duì)方的修改會(huì)立即同步
一個(gè)數(shù)據(jù)卷可以被多個(gè)容器同時(shí)掛載
一個(gè)容器也可以被掛載多個(gè)數(shù)據(jù)卷
數(shù)據(jù)卷作用:
容器數(shù)據(jù)持久化
外部機(jī)器和容器間接通信
容器之間數(shù)據(jù)交換
配置數(shù)據(jù)卷: docker run ... –v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件) ...
目錄必須是絕對(duì)路徑
如果目錄不存在,會(huì)自動(dòng)創(chuàng)建
可以掛載多個(gè)數(shù)據(jù)卷


數(shù)據(jù)卷容器:
多個(gè)容器掛載在同一個(gè)數(shù)據(jù)卷可以實(shí)現(xiàn)容器間的數(shù)據(jù)交互
數(shù)據(jù)卷容器也是做這個(gè)事的
數(shù)據(jù)卷容器掛載到數(shù)據(jù)卷上, 其他容器都掛載到數(shù)據(jù)卷容器上, 就可以實(shí)現(xiàn)多個(gè)容器的數(shù)據(jù)交互了, 但本質(zhì)上還是多個(gè)容器掛載到同一個(gè)數(shù)據(jù)卷上
- 創(chuàng)建啟動(dòng)c3數(shù)據(jù)卷容器,使用 –v 參數(shù) 設(shè)置數(shù)據(jù)卷
docker run –it --name=c3 –v 容器目錄 centos:7 /bin/bash
docker會(huì)自動(dòng)在宿主機(jī)上分配一個(gè)目錄作為數(shù)據(jù)卷 - 創(chuàng)建啟動(dòng) c1 c2 容器,使用 –-volumes-from 參數(shù) 掛載到c3
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
部署mysql案例:
- 搜索鏡像
docker search mysql - 拉取鏡像
docker pull mysql:5.6 - 在/root目錄下創(chuàng)建mysql目錄用于存儲(chǔ)mysql數(shù)據(jù)信息
mkdir ~/mysql
cd ~/mysql - 創(chuàng)建docker容器
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
參數(shù)說明:
-p 3307:3306:將容器的 3306 端口映射到宿主機(jī)的 3307 端口。
-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ù)目錄
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。 - 進(jìn)入容器,操作mysql
docker exec –it c_mysql /bin/bash
使用外部機(jī)器連接mysql時(shí), 需要使用宿主機(jī)的ip和端口
dockerfile
我們可以通過dockerfile中的命令去自定義鏡像, 例如我們自己寫了個(gè)springboot應(yīng)用, 想要發(fā)布到docker中, 就可以通過dockerfile構(gòu)建出對(duì)應(yīng)的鏡像, 然后再通過鏡像啟動(dòng)容器
dockerfile中的一些關(guān)鍵字:
| 關(guān)鍵字 | 作用 | 備注 |
|---|---|---|
| FROM | 指定父鏡像 | 指定dockerfile基于那個(gè)image構(gòu)建 |
| MAINTAINER | 作者信息 | 用來標(biāo)明這個(gè)dockerfile誰寫的 |
| LABEL | 標(biāo)簽 | 用來標(biāo)明dockerfile的標(biāo)簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看 |
| RUN | 執(zhí)行命令 | 執(zhí)行一段命令 默認(rèn)是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
| CMD | 容器啟動(dòng)命令 | 提供啟動(dòng)容器時(shí)候的默認(rèn)命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
| ENTRYPOINT | 入口 | 一般在制作一些執(zhí)行就關(guān)閉的容器中會(huì)使用 |
| COPY | 復(fù)制文件 | build的時(shí)候復(fù)制文件到image中 |
| ADD | 添加文件 | build的時(shí)候添加文件到image中 不僅僅局限于當(dāng)前build上下文 可以來源于遠(yuǎn)程服務(wù) |
| ENV | 環(huán)境變量 | 指定build時(shí)候的環(huán)境變量 可以在啟動(dòng)的容器的時(shí)候 通過-e覆蓋 格式ENV name=value |
| ARG | 構(gòu)建參數(shù) | 構(gòu)建參數(shù) 只在構(gòu)建的時(shí)候使用的參數(shù) 如果有ENV 那么ENV的相同名字的值始終覆蓋arg的參數(shù) |
| VOLUME | 定義外部可以掛載的數(shù)據(jù)卷 | 指定build的image那些目錄可以啟動(dòng)的時(shí)候掛載到文件系統(tǒng)中 啟動(dòng)容器的時(shí)候使用 -v 綁定 格式 VOLUME ["目錄"] |
| EXPOSE | 暴露端口 | 定義容器運(yùn)行的時(shí)候監(jiān)聽的端口 啟動(dòng)容器的使用-p來綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
| WORKDIR | 工作目錄 | 指定容器內(nèi)部的工作目錄 如果沒有創(chuàng)建則自動(dòng)創(chuàng)建 如果指定/ 使用的是絕對(duì)地址 如果不是/開頭那么是在上一條workdir的路徑的相對(duì)路徑 |
| USER | 指定執(zhí)行用戶 | 指定build或者啟動(dòng)的時(shí)候 用戶 在RUN CMD ENTRYPONT執(zhí)行的時(shí)候的用戶 |
| HEALTHCHECK | 健康檢查 | 指定監(jiān)測當(dāng)前容器的健康監(jiān)測的命令 基本上沒用 因?yàn)楹芏鄷r(shí)候 應(yīng)用本身有健康監(jiān)測機(jī)制 |
| ONBUILD | 觸發(fā)器 | 當(dāng)存在ONBUILD關(guān)鍵字的鏡像作為基礎(chǔ)鏡像的時(shí)候 當(dāng)執(zhí)行FROM完成之后 會(huì)執(zhí)行 ONBUILD的命令 但是不影響當(dāng)前鏡像 用處也不怎么大 |
| STOPSIGNAL | 發(fā)送信號(hào)量到宿主機(jī) | 該STOPSIGNAL指令設(shè)置將發(fā)送到容器的系統(tǒng)調(diào)用信號(hào)以退出。 |
| SHELL | 指定執(zhí)行腳本的shell | 指定RUN CMD ENTRYPOINT 執(zhí)行命令的時(shí)候 使用的shell |
一個(gè)例子, 部署springboot項(xiàng)目:
dockerfile:
FROM java:8
ADD springboot.jar app.jar
CMD java -jar app.jar
根據(jù)dockerfile構(gòu)建鏡像:
docker build -f ./dockerfile -t app:1
-f 指定dockerfile文件
-t 給鏡像取名字
啟動(dòng)容器:
docker run -id -p 7777:8080 app




