Docker 實踐及命令梳理

文檔

Docker Reference Documentationvue

Docker 從入門到實踐 【中文】mysql

安裝

安裝 Docker,設置開機啓動,而後配置阿里雲鏡像加速web

1. 安裝 Docker

Docker 官方安裝redis

CentOS 官方安裝教程,直接安裝速度相對慢,推薦使用 使用腳本自動安裝 Dockersql

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 開機啓動 docker
sudo systemctl enable docker
# 啓動 docker
sudo systemctl start docker

2. 阿里雲鏡像加速

注意!registry-mirrors 須要替換成本身的 阿里雲鏡像加速器地址,經過點擊地址獲取docker

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["這裏替換成本身的阿里雲鏡像加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker CLI

CLI 是 Command-Line Interface (命令行界面)的縮寫
命令詳情能夠參考官方文檔:Docker Reference Documentationshell

這裏經過幾個場景,把 Docker 先用起來數據庫

場景0:Tomcat

# 輸入 docker 回車,docker 的命令會被羅列出來,便於查詢
docker

# 查詢有那些 MySQL 鏡像
docker search tomcat

相對於直接search,使用搜索 Docker Hub 更方便編程

搜索 Tomcatjson

能夠看到相關的鏡像介紹、使用幫助、歷史版本:Tomcat

能夠按照文檔中的 "How to use this image" 的提示來運行鏡像

# 拉取 tomcat 鏡像
docker pull tomcat:8.0-jre8

# 查看鏡像列表,能夠看到 tomcat 鏡像,該命令等特於:docker image ls
docker images

# 運行tomcat 鏡像
docker run tomcat:8.0-jre8

# 前臺運行,會輸出 tomcat 日誌
# 按 Ctrl + C 中止


# 添加 -d 後臺運行參數
docker run -d tomcat:8.0-jre8
# 查看容器列表,能夠查看到容器的id、鏡像(IMAGE)、狀態(STATUS)、網絡端口(PROT)、容器名稱(NAME)等信息
docker ps
# 查看 tomcat 日誌,這裏的 `clever_swanson` 爲容器id或名稱
docker logs clever_swanson
# 查看容器內部進程信息
docker top clever_swanson

# 進入容器
# i 和 t 參數可讓咱們以僞終端的方式進入容器
# bash 是所使用 shell
docker exec -it clever_swanson bash
# 在容器內可使用 Linux 命令

# 退出容器,回到宿主機(宿主機就是安裝 Docker 的這臺機器)
exit

# 不須要容器了,能夠中止容器
docker stop clever_swanson
# 查看容器列表,tomcat 就隱藏了
docker ps
# -a 參數查看所有全部容器的列表(包括中止的 tomcat)
docker ps -a

# 啓動已經中止的容器
docker start clever_swanson

# 刪除容器,若是容器還在運行須要加 -f 參數
docker rm clever_swanson
docker rm -f clever_swanson

# 刪除了容器,就能夠把鏡像也刪除了,若是有容器仍是該鏡像須要加 -f 參數
docker rmi tomcat:8.0-jre8
docker rmi -f tomcat:8.0-jre8

場景1:Tomcat

只是將 Tomcat 容器 run 起來,仍是沒法知足使用
還須要將容器網絡端口映射到宿主機纔可使得外部能夠訪問容器內部服務
爲了方便還須要把 Tomcat 的數據目錄和配置目錄掛載到宿主機,方便直接進行編輯

可參考官方文檔:Tomcat

# 部署 Tomcat
# run 容器時,本地不存在對應鏡像,會自動 pull
# -p 將容器內的網絡端口映射到宿主機 ,8080:8080 前面爲宿主機,後面爲容器
# --name 指定容器名稱
docker run -p 8080:8080 -d --name mytomcat tomcat:8.0-jre8

# 能夠經過 docker 的子命令對 容器進行操做,好比:ps,exec,top,stop

# 這個容器已經佔用了宿主機的 8080 端口,爲了後續的 Tomcat 能夠綁定到宿主機的 8080 端口,因此將 這個容器 stop
docker stop mytomcat

# 經過數據卷的方式 將容器內的數據映射到宿主機
# 語法:- v 數據卷名稱:容器內目錄
# Tomcat 部署的 web應用目錄:/usr/local/tomcat/webapps
# 配置文件:/usr/local/tomcat/conf
docker run -p 8080:8080 -v apps:/usr/local/tomcat/webapps -v confs:/usr/local/tomcat/conf -d --name mytomcat2 tomcat:8.0-jre8

這個時候 Tomcat 已經啓動了,能夠經過 http://ip宿主機:8080 來訪問 Tomcat 的默認主頁,例如個人訪問地址 http://192.168.43.166:8080 ,看到湯姆貓的圖標就成功了。若是訪問失敗,多是對應的 8080 端口沒有開放,CentOS7 能夠參考:CentOS7開啓端口

場景2:MySQL

可參考官方文檔:MySQL

# 經過 -e 指定參數,指定 MySQL 的 root 帳戶的密碼爲:1234
docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d mysql:5.7.32

# 中止容器,防止端口占用
docker stop mysql

# 數據庫的數據將會隨着容器消失而消失,因此須要將數據庫文件持久化到宿主機,
# 配置映射到本地
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql  mysql:5.7.32

MySQL 就成功運行了,能夠經過 Navicat 或者其餘工具測試數據庫,地址爲宿主機 ip地址,用戶名爲 root,密碼爲:1234,能夠嘗試存儲數據,數據會被存儲在數據卷,這裏指定的數據卷名稱爲:mysqldata

# 查看全部數據卷
docker volume ls
# 查看 MySQL 的數據卷
docker inspect mysqldata
# 返回的 json 對象,其中 Mountpoint 的值就是,文件對應掛載的位置

# 我這裏掛載的地址爲:/var/lib/docker/volumes/mysqldata/_data
# 進入這個目錄,就能夠看到存儲的文件

使用數據卷的好處在於:容器被移除了,從新運行一個新容器,直接掛載原來的數據卷就可了,數據不會丟失

# 移除容器
docker rm -f mysql2
# 從新運行新的容器,並掛載原來的數據卷
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql  mysql:5.7.32

Redis

可參考官方文檔:Redis

須要注意的是:Redis 須要在鏡像名稱即 redis:5.0.10 的後面添加 redis-server --appendonly yes ,以此覆蓋鏡像默認的命令

docker run --name redis -p 6379:6379 -d redis:5.0.10

# 中止容器,防止端口占用
docker stop redis

# 開啓持久化 redis-server --appendonly yes
# 開啓後,持久化生成的 aop 文件會被放入容器中的 /data 目錄中
docker run --name redis2 -p 6379:6379 -d -v redisdata:/data redis:5.0.10 redis-server --appendonly yes
# 可使用 Redis Desktop Manager 等工具,經過宿主機 ip 鏈接,進行測試

清理容器

# 查看容器列表能夠看到不少容器
docker ps
# -a 能夠看到全部的容器,包括已經中止的
docker ps -a
# 若是忘記了參數或者命令能夠在命令後面加上 --help,會有提示
docker ps --help
# 能夠看到:-q, --quiet   Only display container IDs,即:-q參數僅輸出容器id,結合 -a,能夠輸出全部容器的 id
docker ps -aq
# 結合 rm -f 就能夠移除全部的容器了
docker rm -f $(docker ps -aq)

# 清除沒有用到的數據卷,有重要數據要謹慎
docker volume prune

docker

咱們能夠經過下面的命令,來找到 docker 的位置

whereis docker
# 我這裏執行返回的結果是:docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz

能夠看到 docker 的可執行文件位於 /usr/bin,這個路徑存在環境變量 PATH 中,因此咱們能夠在任意路徑 使用 docker 命令

Docker 是 C/S 架構模式(客戶端-服務器),因此上面的 docker 其實是 Docker 的客戶端,Docker 的服務器是 Docker Deamon 對應的就是 dockerd,也在這個目錄下,Deamon 就是 Docker 引擎,Docker 客戶端經過 Docker API 與 Deamon 進行通訊

docker 是一個可執行程序,包含了許多命令,輸入

docker --help

會將 Usage(用法)、Option(選項)、Commands(命令)都展現出來,Management Commands 也s是 Commands。每一個命令可能會有它本身的子命令、選項

# run 命令有許多的選項
docker run --help
# volume 命令有許多子命令,例如:ls, rm, inspect
docker volume --help

命令梳理

使用 --help 參數,就能夠查詢到到對應命令的使用方法,因此咱們只要理解 Docker 命令的框架便可,不用記憶命令細節
對鏡像進行操做:images, rmi, search
對容器進行操做:run, stop, start, restart, exec, logs, top
其餘:ps, cp, info, pull, version

還有一些 Management Commands,例如:image, network, volume
這些命令都是名詞,即要操做的對象,而具體的操做經過其子命令指定,語義更加清晰
image 經常使用子命令:ls, rm, prune
network 經常使用子命令:create, ls, inspect, rm, prune
volume 經常使用子命令:同上面 network 的四個

參考資料

Install docker using the convenience script
【編程不良人】Docker容器技術&Docker-Compose實戰
Docker組件
Docker 組件之間的關係

相關文章
相關標籤/搜索