docker是一種用於解決跨平臺、跨環境下編程、測試和部署兼容性問題的強有力工具,其中涉及的操作對象主要包括:
- 倉庫(Repository):用於存放鏡像的地方,包括官方倉庫,各鏡像源倉庫和自己建立的私有倉庫。
- 鏡像(Image):一堆只讀層(read-only layer)的統一視角,在使用層面上可理解爲將編譯環境、程序和數據封裝好的對象。
- 容器(Container):在使用層面,可以理解爲鏡像的實例化。
1. 鏡像操作
- 查看當前本地所有鏡像
docker images
- 查找遠程倉庫某個鏡像(以mysql爲例)
docker serach mysql
- 拉取指定版本鏡像到本地(以mysql 5.6爲例)
docker pull mysql:5.6
- 刪除鏡像
docker rmi mysql:5.6
2. 容器操作
容器的狀態包括:已創建(created)、重啓中(restarting)、運行中( running)、遷移中(removing)、暫停(paused)、停止(exited )、 死亡(dead)
- 查看容器
docker ps # 查看正在運行的容器
docker ps -l # 最近一次創建的容器
docker ps -a # 所有容器(包括停止的)
- 創建容器
# -p映射端口, -v 存儲卷掛載
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d
-v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456-d mysql:5.6
- 啓動容器
docker start -i mysql # 以交互式環境進入容器,注意退出容器後容器停止
docker start -id mysql # 以交互式環境進入守護容器,退出容器後容器扔運行
docker restart mysql # 重啓容器
- 進入容器
docker attach mysql # 從後臺方式進入終端交互方式,注意進入終端後如果exit,則會停止容器
# 更推薦使用
docker exec -itd mysql /bin/bash # 從後臺方式進入終端交互方式,以這種方式進入的話若exit,不會停止容器
- 導出容器快照
docker export mysql > mysql.tar # 導出容器快照到本地文件
- 刪除容器
docker rm -f mysql
- 查看容器端口
docker port msyql
- 查看容器的配置和狀態
docker inspect mysql
- 容器內文件和本地文件的拷貝
# 1. 從容器內拷貝到宿主機
docker cp container_ID: /path/1.txt /desktop
# 2. 從宿主機拷貝到docker
docker cp /desktop/1.txt container_ID: /path
- 更新容器並生成新的鏡像
# step1: 更新容器,如安裝新的庫或者添加文件
# setp2: 提交新鏡像,-m爲備註message,-a爲作者,container_ID爲容器ID,mysql:v2爲鏡像名
docker commit -m="update" -a="guofei_fly" container_ID mysql:v2
# step3: 鏡像打標籤
docker tag image_ID tag_name # xxx爲鏡像ID
3. 製作鏡像
製作鏡像需要製作Dockerfile文件,文件內容基本格式爲:
# Base Images
## 從基礎鏡像構建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python3.6
## 把當前文件夾裏的文件構建到鏡像的根目錄下
ADD . /
## 指定默認工作目錄爲根目錄
WORKDIR /
## 建立基礎鏡像後安裝操作
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
RUN pip config set install.trusted-host mirrors.aliyun.com
RUN pip install -r requirements.txt
## 鏡像啓動後統一執行 sh run.sh, 需在根目錄下配置相關文件
CMD ["sh", "run.sh"]
在Dockerfile所在路徑下,通過如下命令即可製作鏡像:
# 注意最後的.不可省略,表示當前路徑
docker build -t image_test:v1.0 .