此文章采取狂神說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 run -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 run -di --name=nigin -p 80:80 -v /usr/local/mydata/conf/:/etc/nginx nginx