作業內容
參考:玩轉 Docker 容器技術:1-6章 ,按課件內容實踐,並給出實驗報告。
操作系統
本文是基於CentOS7進行的實驗。
安裝Docker
安裝過程
我用的是CentOS,用國內阿里雲安裝,運行以下命令:
//安裝 yum-utils , 使用 yum-config-manager 工具設置Yum源, 後面兩個是 devicemapper驅動依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
//使用阿里源訪問
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//查看指定版本
yum list docker-ce --showduplicates
//安裝指定版本
sudo yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
//啓動並加入開機啓動
sudo systemctl start docker
sudo systemctl enable docker
過程中,我出現了以下問題,原因是沒有把當前用戶加入docker用戶組,解決方法見此鏈接:
驗證安裝成功
在終端輸入docker version
,可以看到client和server的信息:
運行第一個容器
按照老師的PPT,輸入docker run hello-world
運行hello-world鏡像:
輸入以下指令docker run -it ubuntu bash
運行Ubuntu鏡像:
Docker基本操作
顯示本地鏡像庫內容
輸入docker images
可以看到本地已經有了剛剛下載的ubuntu和hello-world鏡像:
顯示運行中的容器
輸入docker ps
,由於沒有運行中的容器,所以內容爲空:
顯示所有容器(包含已中止)
輸入docker ps -a
,可以看到已經中止的ubuntu和hello-world容器:
繼續運行原容器並進入
根據容器的NAMES
屬性輸入以下命令來重新運行ubuntu容器:
docker restart $NAMES
docker ps
dockerr attach $NAMES
MySQL與容器化
拉取MySQL鏡像
輸入docker pull mysql:5.7
拉取鏡像:
再輸入docker images
檢查鏡像是否下載成功:
構建docker鏡像
使用MySQL容器構建文件Dockerfile來構建鏡像,它的常見指令如下:
- 創建文件夾
新建一個文件夾mydock
,並在裏面創建一個dockerfile:
- 錄入dockfile內容
- 構建鏡像
運行命令docker build . -t hello
構建鏡像hello:
- 運行鏡像
輸入docker run -it --rm hello -H
:
使用MySQL容器
- 啓動服務器
輸入以下命令:sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
- 啓動MySQL客戶端
輸入以下命令憑藉用戶名和密碼打開數據庫端口:docker run -it --net host mysql:5.7 "sh" mysql -h127.0.0.1 -P3306 -uroot -proot
- 創建卷並掛載
創建卷mydb
並掛在/var/lib/mysql
中:docker rm $(docker ps -a -q) -f -v docker volume create mydb docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
- 啓動客戶端容器鏈接服務器
使用``–link```連接兩個容器,使得客戶端容器內可以使用mysql這個別名訪問服務器:docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash mysql -hmysql -P3306 -uroot -proot
Docker倉庫(Registry)
registry
是registry映像的一個實例,在Docker中運行。我將根據官網指南搭建私有容器倉庫。
運行本地倉庫
使用以下命令來啓動倉庫容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
將映像從Docker Hub複製到registry
以下示例表示從Docker Hub上拉取ubuntu:16.04
鏡像,並且重新標記爲my-ubuntu
,然後把它推送到本地倉庫。最後刪除掉ubuntu:16.04
和my-ubuntu
鏡像,把my-ubuntu
鏡像從本地倉庫移除。
- 拉取ubuntu:16.04鏡像
輸入命令:docker pull ubuntu:16.04
- 將鏡像標記爲
localhost:5000/my-ubuntu
。這將爲現有鏡像創建一個附加標籤。當標籤的第一部分是主機名和端口時,推入時Docker會將其解釋爲倉庫的位置。
輸入命令:docker tag ubuntu:16.04 localhost:5000/my-ubuntu
- 將鏡像推送到在
localhost:5000
運行的本地倉庫
輸入命令:docker push localhost:5000/my-ubuntu
- 刪除本地緩存ubuntu:16.04和localhost:5000/my-ubuntu 鏡像,可以測試從倉庫拉取鏡像。這不會從倉庫中刪除localhost:5000/my-ubuntu鏡像。
輸入命令:docker image remove ubuntu:16.04 docker image remove localhost:5000/my-ubuntu
- 把localhost:5000/my-ubuntu鏡像從倉庫中拉取出來
輸入命令:docker pull localhost:5000/my-ubuntu
停止本地倉庫
- 停止倉庫,可以用以下命令,和停止容器一樣的操作:
docker container stop registry
- 刪除倉庫,用以下命令:
docker container rm -v registry