Docker的基本使用

Docker

1. Docker的安裝與啟動

1.1 安裝docker

這裡安裝在CentOS7.x以上版本,在CentOS6.x版本中,安裝前需要安裝其他許多環境而且Docker很多修補程式不支援更新。

(1)yum包更新到最新

sudo yum update 

(2)安裝所需的軟體包。yum-utils 提供了 yum-config-manager ,並且 device mapper 存儲驅動程式需要 device-mapper-persistent-data 和 lvm2。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

(3)設置yum源為阿里雲或清華大學源

阿里云:sudo yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清華大學:sudo yum-config-manager --add-repo //mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

(4)安裝Docker社區版

sudo yum install docker-ce

(5)查看Docker版本

docker -v

1.2 設置ustc鏡像

docker 從 docker hub 拉取鏡像,因為是從國外獲取,速度較慢。可以通過配置中國鏡像源的方式,從中國獲取鏡像,提高拉取速度。這裡介紹使用中國科學技術大學(LUG@USTC)的開源鏡像 //docker.mirrors.ustc.edu.cn

(1)編輯該文件,如果沒有該文件請先創建

vi /etc/docker/daemon.json

(2)在該文件中輸入如下內容

"registry-mirrors": ["//docker.mirrors.ustc.edu.cn"]

image-20210814191438191

1.3 Docker的啟動與停止

systemctl命令是系統服務管理命令。

(1)啟動Docker

systemctl start docker

(2)停止Docker

systemctl stop docker

(3)重啟Docker

systemctl restart docker

(4)查看Docker狀態

systemctl status docker

(5)開機啟動

systemctl enable docker

(6)查看Docker概要資訊

docker info

(7)查看Docker幫助文檔

docker --help

2. 常用命令

2.1 鏡像相關命令

2.1.1 查看鏡像

(1)列出所有鏡像

docker images

(2)列出指定鏡像

docker image ls 鏡像名
docker images 鏡像名

REPOSITORY:倉庫

TAGE:標籤

IAMGE ID:鏡像ID

CREATED:創建時間

SIZE:鏡像大小

這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下。

2.1.2 搜索鏡像

docker search 鏡像名稱

NAME :鏡像名稱

DESCRIPTION:鏡像描述

STARS:用戶評價,反應一個鏡像的受歡迎度

OFFICIAL:是否官方

AUTOMATED:自動創建,表示該鏡像有Docker Hub自動構建流程創建

2.1.3 拉取鏡像

(1)拉取鏡像是從中央倉庫下載鏡像到本地

docker pull 鏡像名稱

(2)例如,下載centos7鏡像

docker pull centos:7

如果不指定後面標籤(:7),其默認標籤為latest,即為最新鏡像。

2.1.4 刪除鏡像

(1)刪除指定鏡像,按鏡像ID刪除

docker rmi 鏡像ID

(2)刪除所有鏡像

docker rmi `docker images -q`

2.2 容器相關命令

2.2.1 查看容器

(1)查看正在運行的容器

docker ps

(2)查看所有容器

docker ps -a

(3)查看最後一次運行的容器

docker ps -l

(4)查看停止的容器

docker ps -f status=exited

2.2.2 創建和啟動容器

創建容器常用的參數說明:

創建容器命令:docker run

  • -i:表示運行容器

  • -t:表示容器啟動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個偽終端。

  • –name :為創建的容器命名。

  • -v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上。

  • -d:在run後面加上-d參數,則會創建一個守護式容器在後台運行(這樣創建容器後不會自動登錄容器,如果只加-i -t兩個參數,創建後就會自動進去容器)。

  • -p:表示埠映射,前者是宿主機埠,後者是容器內的映射埠。可以使用多個-p做多個埠映射。

(1)互動式方式創建容器。進入容器退出後,容器即運行停止。

docker run -it --name=容器名稱 鏡像名稱:標籤 /bin/bash

例如:

docker run -it --name=mycentos centos:7 /bin/bash

(2)退出當前容器

exit或CTRL+D

(3)守護式方式創建容器。進入容器在退出後,容器依舊運行。

docker run -di --name=容器名稱 鏡像名稱:標籤

(4)進入容器

docker exec -it 容器名稱(或者容器ID)/bin/bash

2.2.3 容器的啟動與停止

(1)停止容器

docker stop 容器名稱(或者容器ID)

(2)啟動容器

docker start 容器名稱(或者容器ID)

(3)創建容器時自啟

docker run -d --restart=always --name=設置容器名 使用的鏡像

(上面命令 –name後面兩個參數根據實際情況自行修改)

–restart具體參數值詳細資訊:

  • no: 默認策略,容器退出時不重啟容器;

  • on-failure:在容器非正常退出時(退出狀態非0)才重新啟動容器;

  • on-failure:3: 在容器非正常退出時重啟容器,最多重啟3次;

  • always:無論退出狀態是如何,都重啟容器;

  • unless-stopped:在容器退出時總是重啟容器,但是不考慮在 Docker 守護進程啟動時就已經停止了的容器。

(4)修改已有容器,使用update

docker update --restart=always 容器ID(或者容器名)

(容器ID或者容器名根據實際情況修改)

2.2.4 文件拷貝

(1)如果我們需要將文件拷貝到容器內可以使用cp命令

docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄

(2)也可以將文件從容器內拷貝出來

docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄

2.2.5 目錄掛載

在創建容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器。 創建容器 添加-v參數 後邊為 宿主機目錄:容器目錄,例如:

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多級的目錄,可能會出現許可權不足的提示。

這是因為CentOS7中的安全模組selinux把許可權禁掉了,我們需要添加參數 –privileged=true 來解決掛載的目錄沒有許可權的問題。

2.2.6 查看容器 IP 地址

(1)我們可以通過以下命令查看容器運行的各種數據

docker inspect 容器名稱(容器ID) 

(2)也可以直接執行下面的命令直接輸出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)

2.2.7 實時查看docker容器的日誌

docker logs -f -t --tail -f 容器名稱(或者容器ID)

2.2.8 刪除容器

刪除容器前需要先停止要刪除的容器。

docker rm 容器名稱(容器ID)

3. 應用部署

3.1 MySQL部署

(1)拉取mysql鏡像

docker pull centos/mysql-57-centos7

(2)創建容器

docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 代表埠映射,格式為 宿主機映射埠:容器運行埠

-e 代表添加環境變數 MYSQL_ROOT_PASSWORD 是root用戶的登陸密碼

(3)進入mysql容器

docker exec -it tensquare_mysql /bin/bash

(4)登錄mysql並修改root密碼

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

(5)添加遠程登錄用戶

CREATE USER 'tanghuan'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'tanghuan'@'%';

(6)遠程登錄mysql

mysql -h 連接宿主機的IP -u 資料庫擁有的用戶名 -p

3.2 tomcat部署

(1)拉取鏡像

docker pull tomcat:7-jre7

(2)創建容器

-p表示地址映射埠,-v表示掛載目錄

docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

(3)將本地war包拷貝到宿主機/usr/local/webapps路徑下完成部署

3.3 Nginx部署

(1)拉取鏡像

docker pull nginx

(2)創建Nginx容器

docker run -di --name=mynginx -p 80:80 nginx

(3)進入Nginx容器中

docker exec -it mynginx /bin/bash

(4)查看nginx.conf配置文件

cat /etc/nginx/nginx.conf

image-20210815164254980

可以看到其配置是外部導入的,方便分模組化的管理。

(5)查看默認配置文件default.conf

cat /etc/nginx/conf.d/default.conf

image-20210815164526860

可以看到其歡迎頁的目錄是在/usr/share/nginx/html文件中。

(6)修改本地上傳的文件名為html,並複製到Nginx容器的/usr/share/nginx目錄中

mv 本地文件名 html
docker cp html mynginx:/usr/share/nginx

3.4 Redis部署

(1)拉取鏡像

docker pull redis

(2)創建容器

docker run -di --name=myredis -p 6379:6379 redis

(3)進入容器並通過 redis-cli 連接測試使用 redis 服務。

docker exec -it myredis /bin/bash

image-20210815170856069

4. 備份與遷移

4.1 容器保存為鏡像

docker commit 容器名稱 鏡像名稱
例:docker commit mynginx mynginx_i

4.2 鏡像備份

將鏡像保存為文件

docker save -o 文件名 鏡像名
例:docker save -o mynginx.tar mynginx_i

-o:output

4.3 鏡像恢復與遷移

首先我們先刪除掉自己創建的mynginx_i鏡像,然後執行此命令進行恢復

docker load -i 文件名
例:docker load -i mynginx.tar

-i:輸入的文件

5. Dockerfile

5.1 什麼是Dockerfile

Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終創建一個新的鏡像。

1、對於開發人員:可以為開發團隊提供一個完全一致的開發環境; 2、對於測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了; 3、對於運維人員:在部署時,可以實現應用的無縫移植。

5.2 常用命令

命令 作用
FROM image_name:tag 定義了使用哪個基礎鏡像啟動構建流程
MAINTAINER user_name 聲明鏡像的創建者
ENV key value 設置環境變數 (可以寫多條)
RUN command 是Dockerfile的核心部分(可以寫多條)
ADD source_dir/file dest_dir/file 將宿主機的文件複製到容器內,如果是一個壓縮文件,將會在複製後自動解壓
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有壓縮文件並不能解壓
WORKDIR path_dir 設置工作目錄

6. 使用腳本創建 JDK8 鏡像

(1) 創建目錄

mkdir –p /usr/local/dockerjdk8

(2)下載 jdk-8u301-linux-x64.tar.gz 並上傳到伺服器(虛擬機)中的 /usr/local/dockerjdk8 目錄

(3)創建文件 Dockerfile (文件名必須是Dockerfile)

vi Dockerfile

(4)在Dockerfile 中編輯內容

# 依賴鏡像名稱和ID
FROM centos:7
# 指定鏡像創建者資訊
MAINTAINER tanghuan
# 切換工作目錄
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相對路徑jar,把java添加到容器中
ADD jdk-8u301-linux-x64.tar.gz /usr/local/java/

# 配置java環境變數
ENV JAVA_HOME /usr/local/java/jdk1.8.0_301
ENV JRE_HOME /usr/local/java/jdk1.8.0_301/jre
ENV PATH $JAVA_HOME/bin:$PATH

(5)執行命令構建鏡像

docker build -t 'jdk:1.8' .
  • -t:表示鏡像名:標籤

  • .:表示在當前目錄下找 Dockerfile 文件

(5)查看鏡像是否構建完成

docker images

image-20210815183955344

7.Docker私有倉庫

Docker私有倉庫主要用於存放同一企業應用,在同一區域網下可以拉取鏡像。Docker私有倉庫本質上也是一個鏡像。

7.1 私有倉庫搭建與配置

(1)拉取私有倉庫鏡像

docker pull registry

(2)啟動私有倉庫容器

docker run -di --name=myregistry -p 5000:5000 registry

(3)訪問 //虛擬機ip:5000/v2/_catalog ,能看到 {「repositories」:[]} 表示創建成功,且倉庫內容為空

(4)修改 daemon.json,用於讓 Docker 信任私有倉庫地址

vi /etc/docker/daemon.json

(5)daemon.json添加如下內容

{
"insecure-registries":["192.168.190.139:5000"]
}

image-20210815191549570

(6)重啟 Docker 服務

systemctl restart docker

7.2 鏡像上傳至私有倉庫

(1)標記此鏡像為私有倉庫的鏡像

docker tag 標籤名 IP:5000/鏡像名
例如:
docker tag jdk:1.8 192.168.190.139:5000/jdk1.8

(2)再次啟動私服容器

docker start myregistry

(3)上傳標記的鏡像

docker push IP:5000/標籤名
例如:
docker push 192.168.190.139:5000/jdk1.8

(4)再次訪問 //虛擬機ip:5000/v2/_catalog ,能看到 {「repositories」:[jdk1.8]} 表示上傳創建成功

(5)拉取標記的鏡像

docker pull IP:5000/標籤名
例如:
docker pull 192.168.190.139:5000/jdk1.8

 

Tags: