Docker Reference Documentationvue
Docker 從入門到實踐 【中文】mysql
安裝 Docker,設置開機啓動,而後配置阿里雲鏡像加速web
Docker 官方安裝redis
CentOS 官方安裝教程,直接安裝速度相對慢,推薦使用 使用腳本自動安裝 Docker:sql
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
注意!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
CLI 是 Command-Line Interface (命令行界面)的縮寫
命令詳情能夠參考官方文檔:Docker Reference Documentationshell
這裏經過幾個場景,把 Docker 先用起來數據庫
# 輸入 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
只是將 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開啓端口
可參考官方文檔: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: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 的位置
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 組件之間的關係