Docker使用從入門到「放棄」

2020-08-09 11:10:10

1. 基本介紹

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協定開源。

Docker 可以讓開發者打包應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制 機製,相互之間不會有任何介面(類似 iPhone 的 app), 更重要的是容器效能開銷極低。

2. 安裝

安裝前先關閉selinix, 重新啓動系統

vi /etc/selinux/config 修改 SELINUX=disabled 
安裝
yum install docker
啓動
systemctl start docker
停止
systemctl stop docker
自啓動
systemctl enable docker

3. 基本使用

(1)拉取映象

docker pull name:tag

舉例:

如:安裝mysql

docker pull docker.io/mysql:5.7.27

docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27 

(2)建立容器執行範例

docker run [映象名]

-i 以互動模式執行容器
-t 爲容器重新分配一個僞輸入終端
-d 後臺執行容器,並返回容器ID;
-p 埠對映   (外部埠:容器內部埠)
-e 環境變數
--restart 重新啓動docker時是否自啓動該容器
--privileged 給容器新增特權,可以存取宿主機的檔案
--name 給容器取名
-v	掛載宿主機的資料夾或檔案到容器的特定資料夾或檔案

(3)檢視docker正在執行的進程

​ docker ps

(4)檢視所有已建立的docker容器

​ docker ps -a

(5)進入docker容器

​ docker exec -it [容器id] /bin/bash

新增組態檔
vim /root/mysql/conf/my.cnf
###
[mysqld]
default-time-zone = '+08:00'
###

(6)重新啓動容器

​ docker restart [容器id]

(7)Docker WEB UI

tips: 可以使用web ui 進行 docker 容器視覺化管理

docker pull docker.io/portainer/portainer
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --privileged=true --name prtainer-test portainer/portainer

4. 其它命令

(1)批次啓動所有容器

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

(2)批次停止所有

docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)

(3)批次刪除所有

docker rm $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)

(4)停止正在執行的容器

docker kill $(docker ps -a -q)

(5)刪除所有已經停止的容器

docker rm $(docker ps -a -q)

(6)刪除所有映象

docker rmi $(docker images -q)

(7)更新參數

如使重新啓動docker時容器自動啓動:

docker container update --restart=always [容器ID]

5.樣例

(1)安裝mysql

docker pull docker.io/mysql:5.7.27

docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27 

(2)安裝nginx

​ 1. 安裝

宿主機建立資料夾
mkdir /root/nginx

拉取映象
docker pull nginx

執行nginx容器
docker run -d --name mynginx -it -p 80:80 \
--restart=always \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf:/etc/conf \
-v /root/nginx/logs:/var/log/nginx \
--privileged=true \
nginx

  1. 組態檔

    /root/nginx/conf/nginx.conf

    #user  nobody;
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
  2. 重新啓動nginx服務

    docker exec -i {容器ID} nginx -s reload

(3)安裝RabbitMQ

docker run -d --hostname rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 4369:4369 -p 15671:15671 -p 5671:5671 -p 25672:25672 -p 15672:15672 -p 5672:5672 rabbitmq:3.8.3-management

6.映象操作

(1)儲存容器到映象

​ docker commit -a 「作者」 -m 「容器描述」 [容器ID] [儲存的映象名]:[TAG]

docker commit -a "yangjing" -m "mysql with vim" a404c6c174a2 my-mysql:5.7.27

(2)與宿主機相互複製檔案

​ docker cp [宿主機檔案路徑] [容器ID]:[容器路徑]

docker cp /root/abc.txt  96f7f14e99ab:/var/abc.txt

​ docker cp [容器ID]:[容器路徑] [宿主機檔案路徑]

docker cp 96f7f14e99ab:/var/abc.txt  /root/abc.txt 

(3)將映象儲存到本地檔案

​ docker save -o [本地檔案路徑] [映象名]:[TAG]

docker save -o /root/my-mysql.tar  my-mysql:5.7.27

(4)從本地映象載入到docker

​ docker load < [檔名]

docker load < my-mysql.tar

7.Java構建docker映象

(1)Dockerfile

① 基本java程式打包到容器執行

# 使用含有openjdk8的基礎映象
FROM openjdk:8
MAINTAINER jim
# 新增該檔案到容器中
ADD file-test-0.0.1-SNAPSHOT.jar app.jar
# 向外部暴露埠
EXPOSE 81
# 啓動時執行該命令
ENTRYPOINT ["java","-jar","/app.jar"]

(2)構建

docker build -t jim/file-test .
# 構建完成檢視
docker images

(3) 執行

docker run -it -d -p 81:81 jim/file-test