ContOS 7安裝Docker使用及部署MySQL和Nginx
此文章採取狂神說Java
https://space.bilibili.com/95256449
Docker學習網址:
Docker官網:https://www.docker.com/
Docker中文官網:https://www.dockerchina.cn/
Docker菜鳥教程:https://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映象庫地址:https://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