ContOS 7安裝Docker使用及部署MySQL和Nginx

此文章採取狂神說Java

//space.bilibili.com/95256449


Docker學習網址:

Docker官網://www.docker.com/
Docker中文官網://www.dockerchina.cn/
Docker菜鳥教程://www.runoob.com/docker/docker-tutorial.html


Docker的優勢:

  1. 更高效的利用系統資源
  2. 更快速的啟動時間
  3. 一致的環境
  4. 持續交付和部署
  5. 更輕鬆的遷移
  6. 更輕鬆的維護和擴展

容器和虛擬機的比較:

與傳統的虛擬機相比,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

  1. yum包更新到最新
 $ yum update
  1. 安裝Docker,出現輸入的介面都按y
 $ yum install docker
  1. 檢測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