ContOS 7安裝Docker使用及部署MySQL和Nginx
- 2022 年 3 月 3 日
- 筆記
此文章採取狂神說Java
Docker學習網址:
Docker官網://www.docker.com/
Docker中文官網://www.dockerchina.cn/
Docker菜鳥教程://www.runoob.com/docker/docker-tutorial.html
Docker的優勢:
- 更高效的利用系統資源
- 更快速的啟動時間
- 一致的環境
- 持續交付和部署
- 更輕鬆的遷移
- 更輕鬆的維護和擴展
容器和虛擬機的比較:
與傳統的虛擬機相比,Docker優勢體現啟動速度快、佔用體積小
Docker伺服器與客戶端
Docker是一個客戶端-伺服器(C/S)架構程式。Docker客戶端只需要向Docker伺服器或者守護進程發出請求,伺服器或者守護進程將完成所有工作並返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一個宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一台宿主機上的遠程Docker守護進程。
Docker鏡像與容器
鏡像是構建Docker的基石,用戶基於鏡像來運行自己的容器。鏡像也是Docker生命周期中的「構建」部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。例如:
- 添加一個文件
- 執行命令窗口
- 打開一個窗口
Docker可以幫助你構建和部署容器,你只需要把自己的應用程式或者服務打包放進容器即可。容器是基於鏡像啟動起來的,容器中可以運行一個或者多個進程。我們可以認為,進項是Docker生命周期中的構建或者打包階段,而容器則是啟動或者執行階段。容器基於鏡像啟動,一旦容器啟動完成後,我們就可以登錄倒容器中安裝自己需要的軟體或者服務,所以Docker容器就是:
- 一個鏡像格式
- 一些列標準操作
- 一個執行環境
Docker借鑒了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟體。和集裝箱一樣,Docker在執行操作時,並不關心容器中到底裝了什麼,他不管是web伺服器,還是資料庫或者是應用程式伺服器什麼的,所有的容器都按照相同的方式將內容「裝載」進去。
Registry(註冊中心)
Docker用Registry來保存用戶構建對象。Registry分為公共和私有兩種,Docker公司運營公共的Registry叫做Docker Hub。用戶可在Docker Hub註冊帳號,分享並保存自己的鏡像(在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
安裝Docker
yum
包更新到最新
$ yum update
- 安裝Docker,出現輸入的介面都按
y
$ yum install docker
- 檢測Docker安裝是否成功並查看Docker版本
$ docker -v
Docker的啟動與停止
# 啟動docker
$ systemctl start docker
# 查看docker是否啟動成功
$ systemctl status docker
# docker 幫助文檔
$ docker help
# 停止docker(容器)
$ systemctl stop docker
# 開機默認啟動Docker
$ systemctl enable docker
Docker常用命令
鏡像相關命令
# 查看鏡像
$ docker images
- REPOSITORY:鏡像
- TAG:鏡像標籤
- IMAGE ID:鏡像ID
- CREATED:鏡像的創建日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下
搜索鏡像
如果你需要從網路中查找需要的鏡像
# docker search 鏡像名稱
$ docker search nginx
- NAME:倉庫名稱
- DESCRIPTION:鏡像描述
- STARS:用戶評價,反應一個鏡像的受歡迎程度
- OFFICIAL:是否官方
- AUTOMATED:自定構建,表示該鏡像由Docker Hub自動構建流程創建的
拉取鏡像
# docker pull 鏡像名稱
$ docker pull nginx
刪除鏡像
按鏡像ID刪除鏡像
# docker rmi 鏡像ID
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest c919045c4c2b 40 hours ago 142 MB
[root@192 ~]# docker rmi c919045c4c2b
Untagged: docker.io/nginx:latest
Untagged: docker.io/nginx@sha256:1c13bc6de5dfca749c377974146ac05256791ca2fe1979fc8e8278bf0121d285
Deleted: sha256:c919045c4c2b0b0007c606e763ed2c830c7b1d038ce878a3c0d6f5b81e6ab80b
Deleted: sha256:397dbc5767fa9031bfbe1523c4f0de80ad7ce8103b8cc2b58e6f36554c7f93eb
Deleted: sha256:347cfffd04bb8392ba1999a911a3d9b5c2327a8b516a943d17965b41c88e1216
Deleted: sha256:1b611a5b7c5d88f05e9eedeec09ba67bb81821a18dd21c6a0644a2e5017ac524
Deleted: sha256:78dd14d2a308dfd875fc3baae9b8b2e1a15c7fbee828cdbdd8e55b18c64c6128
Deleted: sha256:f5d1b591ffdcdfd05874cf66cb351506c6ef683cb58d2883bde24819b5a4f37d
Deleted: sha256:1401df2b50d5de5a743b7bac3238ef3b7ce905ae39f54707b0ebb8eda3ab10bc
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@192 ~]#
刪除所有鏡像
$ docker rmi `docker images -q`
容器相關命令
查看所有容器
$ docker ps -a
查看最後一次運行的容器
$ docker ps -l
查看停止的容器
$ docker ps -f status=exited
創建與啟動容器
創建容器常用的參數說明
創建容器命令:
$ docker run
-
-i:表示運行容器
-
-t:表示容器啟動後進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個偽終端
-
–name:為創建的容器命名
-
-v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可以使用多個-v 做多個目錄活或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上
-
-d:在run後面加上-d參數,則會創建一個守護式容器在後台運行(這樣創建容器後不會自動登錄容器,如果只加-i -t 兩個參數,創建後就會自動進去容器)
-
-p:表示埠映射,前者是宿主機埠,後者是容器內的映射埠。可以使用多個-p做多個埠映射
1.互動式方式創建容器
$ docker run -it --name=容器名稱 鏡像名稱:標籤/bin/bash
這時我們通過ps命令查看,發現可以看到啟動的容器,狀態為啟動狀態
退出當前容器
$ exit
2.守護式創建容器
$ docker run -di --name=容器名稱 鏡像名稱:標籤
登錄守護容器方式
$ docker exec -it nginx /bin/bash #鏡像名稱或者鏡像ID
查看容器內容
$ ll #或者ls
啟動容器:
$ docker start 容器名稱或者容器ID
查看日誌
docker logs [ID或者名字] 可以查看容器內部的日誌內容
docker logs ID或者名字
文件拷貝
如果我們需要將文件拷貝到容器內可以使用cp命令
$ docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
也可以將文件從容器內拷貝出來
$ docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
查看容器IP地址
我們可以通過以下命令查看容器運行的各個數據
$ docker inspect 容器名稱或者容器ID
也可以執行下面的命令直接輸出IP地址
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱或者ID
刪除容器
刪除鏡像是rmi,刪出容器是rm
$ docker rm 容器名稱或者ID
鏡像操作
mysql部署
1.查看可用MySQL版本
MsSQL鏡像庫地址://hub.docker.com/_/mysql?tab=tags
可以通過Sort by 查看其他版本的MySQL,默認是罪行版本 mysql:latest
還可以用 docker 命令來查看其他版本
$ docker search mysql
2.拉取 MySQL 鏡像
拉取官方的最新版本的鏡像
$ docker pull mysql:latest #:latest可以省略,官方默認latest
3.查看本地鏡像
使用命令來查看是否已經安裝了 mysql
$ docker images
4.創建守護方式
$ docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
5.進入mysql容器
$ docker exec -it mysql /bin/bash
6.用mysql打開客戶端
$ mysql -uroot -proot --default-character-set=utf-8
# 登錄mysql
$ mysql -u root -p
7.打開操作
#用show databases打開
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.10 sec)
8.退出當前鏡像
$ exit #或者Ctrl+D
9.停止當前鏡像
$ docker stop 鏡像名稱或者鏡像ID
Nginx部署
創建Nginx容器
$ docker rum -di --name=mysql -p 80:80 nginx
創建nginx的配置目錄
$ docker cp nginx:etc/nginx /usr/local/mydata/nginx/
關閉容器
$ docker stop nginx
刪除容器
$ docker rm nginx
通過容器掛載,掛在nginx
$ docker rum -di --name=nigin -p 80:80 -v /usr/local/mydata/conf/:/etc/nginx nginx