Docker概述
1、Docker概念
Docker是一個開源的應用容器引擎,讓開發者可以打包它們的應用以及依賴包到一個可一直的鏡像中,然後發佈到任何流行的Linux或Windows機器上,也可以實現虛擬化。容器是完全使用沙箱機制,Docker對進程之間相互隔離,相互之間不會有任何的接口,對底層環境無任何要求。
2、設計的目標
- 提供簡單的應用程序打包工具
- 開發人員和運維人員職責邏輯分離
- 多環境保持一致性
3、Docker引擎
Docker引擎是一個在客戶機與服務器的之間應用程序,具有以下的主要組件
(1)server,它是一種長時間運行的程序,稱爲守護進程(dockerd命令)
(2)REST API,接收來自客戶端的請求,調取相應的接口與守護進程進行交互
(3)client,命令行界面(docker命令)
4、Docker的組成
客戶端與Docker服務器的守護進程進行通信,守護進程根據請求來實現構建、運行和發佈。客戶機可以與服務器在同一臺主機,也可以在不同網絡之間進行通信 - Docker Client:客戶端
用戶與Docker交互的主要方式,Docker客戶端可以與多個守護進程進行交互 - Docker Daemon:守護進程
用來監聽Docker API的請求並管理對象,例如鏡像、容器、網絡和卷,守護進程還可以與其他的守護進程通信以管理Docker服務 - Docker Image:鏡像
Docker鏡像是一個只讀模板,包含創建Docker容器的說明,通常一個鏡像基於另一個鏡像,並帶有一些額外的自定義鏡像
可以自定義創建一個鏡像,也可以使用其他人再Docker倉庫創建發佈的鏡像 - Docker Container:容器
容器是鏡像可以運行的實例,可以通過Docker API或者客戶端創建、啓動、停止、移動或者刪除容器,可以將容器連接到一個或者多個網絡,將存儲附加到該網絡中,也可以根據當前的狀態進行創建新的鏡像 - Docker Registry:鏡像倉庫
Docker倉庫用來存儲Docker的鏡像,Docker Hub是任何人都可以使用的Docker鏡像倉庫,Docker配置項也默認在這上面查找鏡像
5、容器與虛擬機的區別
6、Docker應用場景 - 應用程序的打包和發佈
- 應用程序隔離
- 持續集成
- 部署微服務
- 快速搭建測試環境
- 提供PAAS產品(平臺及服務)
Docker安裝部署
1、關閉防火牆及核心功能
[root@docker ~]# systemctl stop firewalld
[root@docker ~]# systemctl disable firewalld
[root@docker ~]# setenforce 0
[root@docker ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
2、安裝依賴包、docker鏡像源、docker安裝
[root@docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum -y install docker-ce
3、啓動docker
[root@docker ~]# systemctl restart docker
[root@docker ~]# systemctl enable docker
4、鏡像加速
申請阿里雲鏡像加速器可查看博客https://blog.51cto.com/14557905/2488798
[root@docker ~]# cd /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
5、網絡優化
[root@docker ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker ~]# sysctl -p
[root@docker ~]# service network restart
[root@docker ~]# systemctl restart docker
到這裏我們的docker容器就部署完成了
Docker常規的命令操作
docker常用指令:
docker pull 下載鏡像
docker search 查找鏡像
docker version 查看版本
docker images 查看已有鏡像
docker inspect 查看鏡像信息
docker tag 添加鏡像標籤
docker rmi 刪除鏡像
docker save -o 文件名 鏡像名 導出鏡像
docker login 登錄
docker push 上傳
docker ps -a 查看容器狀態
1、賬戶登錄(登錄倉庫時使用)
[root@docker ~]# docker login
2、查看版本信息
[root@docker ~]# docker version
3、搜索鏡像(其中STARS數值最高的表示下載量最大的,我們就下載這個就行)
#docker search 鏡像名稱
[root@docker ~]# docker search nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Official build of Nginx. 12946 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1767 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 764 [OK]
docker.io docker.io/linuxserver/nginx An Nginx container, brought to you by Linu... 102
docker.io docker.io/bitnami/nginx Bitnami nginx Docker Image 81 [OK]
......
4、鏡像下載
#docker pull 鏡像名稱
[root@docker ~]# docker pull nginx
Using default tag: latest
Trying to pull repository docker.io/library/nginx ...
latest: Pulling from docker.io/library/nginx
c499e6d256d6: Pull complete
74cda408e262: Pull complete
ffadbd415ab7: Pull complete
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for docker.io/nginx:latest
5、查看所有鏡像
#docker images
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest ed21b7a8aee9 8 days ago 127 MB
6、查看指定鏡像信息
#docker inspect 鏡像ID
[root@docker ~]# docker inspect ed21b7a8aee9
[
{
"Id": "sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291",
"RepoTags": [
"docker.io/nginx:latest"
],
"RepoDigests": [
7、添加鏡像標籤
#docker tag 舊名稱 新名稱
[root@docker ~]# docker tag docker.io/nginx:latest nginx:web
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest ed21b7a8aee9 8 days ago 127 MB
nginx web ed21b7a8aee9 8 days ago 127 MB
#相當於生成創建一個新的鏡像
8、刪除指定鏡像
#docker rmi 鏡像名
#使用鏡像創建容器後,如果沒有刪除容器,鏡像刪除不了
[root@docker ~]# docker rmi nginx:web
Untagged: nginx:web
Untagged: docker.io/nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest ed21b7a8aee9 8 days ago 127 MB
9、將鏡像導出到當前目錄
docker save -o 文件名 鏡像名
[root@docker abc]# docker save -o nginx nginx:latest
[root@docker abc]# ls -lh
總用量 125M
-rw-------. 1 root root 125M 4月 8 18:11 nginx
#文件名可以使用絕對路徑
10、載入鏡像
#docker load < 鏡像名
11、上傳鏡像到倉庫
#docker push 鏡像名稱
#先登錄倉庫,再進行上傳
12、創建容器
#docker create -it 鏡像名 /bin/bash
# -i:讓容器的標準輸入保持打開
# -t:讓Docker分配一個僞終端
[root@docker ~]# docker create -it nginx:latest /bin/bash
de7b916f83fe7a7f5841fba1631c6345125dda760d01ae024263b864cde1f67a
13、容器查看
#docker ps -a
# -a:列出最近一次啓動的容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de7b916f83fe nginx:latest "/bin/bash" 33 seconds ago Created optimistic_torvalds
#此時的狀態爲created
14、啓動容器
#docker start 容器ID
[root@docker ~]# docker start de7b916f83fe
de7b916f83fe
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de7b916f83fe nginx:latest "/bin/bash" 3 minutes ago Up 12 seconds 80/tcp optimistic_torvalds
#此時顯示的狀態爲UP,且端口爲80端口
15、啓動執行命令查看系統根目錄
[root@docker ~]# docker run centos:7 /usr/bin/bash -c ls /
anaconda-post.log
bin
dev
etc
home
lib
#此命令會先檢查本地的鏡像,沒有的話會從倉庫下載
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f451a6ce24e0 centos:7 "/usr/bin/bash -c ..." 36 seconds ago Exited (0) 35 seconds ago awesome_shirley
de7b916f83fe nginx:latest "/bin/bash" 13 minutes ago Up 10 minutes 80/tcp optimistic_torvalds
#執行完成會直接關閉,狀態是exited
#使用docker run -d 爲持續執行
[root@docker ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
11ca9b188156e7216375f30506c22715af08e73cf625cd3fabb300dc0a2d3f0f
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11ca9b188156 centos:7 "/bin/bash -c 'whi..." 7 seconds ago Up 7 seconds festive_dubinsky
f451a6ce24e0 centos:7 "/usr/bin/bash -c ..." 7 minutes ago Exited (0) 7 minutes ago awesome_shirley
de7b916f83fe nginx:latest "/bin/bash" 20 minutes ago Up 17 minutes 80/tcp optimistic_t
16、終止容器
#docker stop 容器ID
#正常退出狀態會變成exit0
17、進入容器
#docker exec -it 容器ID /bin/bash
#一定要是開啓狀態
[root@docker ~]# docker exec -it de7b916f83fe /bin/bash
root@de7b916f83fe:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@de7b916f83fe:/# exit
exit
#退出容器
[root@docker ~]#
18、容器導出
#docker export 鏡像ID
[root@docker abc]# docker export de7b916f83fe > nginx_1
[root@docker abc]# ls
nginx_1
19、容器導入
#cat 文件名 | docker import - 鏡像名
#上傳導入的是鏡像,不會生成容器
[root@docker abc]# cat nginx_1 | docker import - nginx
sha256:88960c2fb5f526bcfae0a747b25fcba690607fc77013338dc9189096843852c8
[root@docker abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 88960c2fb5f5 3 seconds ago 125 MB
[root@docker abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20、刪除容器
#docker rm 容器ID
#批量刪除容器
docker ps -a | awk '{print "docker rm " $1}' | bash