docker的學習總結

王小胖醬發表於2018-11-22

一、docker簡介

docker是一個開源的應用容器引擎;是一個輕量級容器技術; docker支援將軟體編譯成一個映象;然後在映象中各種軟體做好配置,將映象釋出出去,其他使用者可以直接使用這個映象; 執行中的這個映象稱為容器,容器啟動是非常快速的。

docker的學習總結

二、docker的核心概念

docker主機(Host):安裝了Docker程式的機器(docker直接安裝在作業系統之上); 

docker客戶端(Client):連線docker主機進行操作; 

docker倉庫(Registry):用來儲存各種打包好的軟體映象;  

docker映象(Images):軟體打包好的映象;放在docker倉庫中; 

docker容器(Container):映象啟動後的例項稱為一個容器;容器是獨立執行的一個或一組應用

docker的學習總結

三、使用docker步驟

1)、安裝docker 

2)、去docker倉庫找到這個軟體對應的映象(docker hub);

3)、使用docker執行這個映象,這個映象就會生成一個docker容器; 

4)、對容器的啟動停止就是對軟體的啟動停止;

四、docker的安裝與解除安裝

1)、docker的安裝命令 

1、檢查核心版本,必須是3.10及以上

uname -r
複製程式碼

# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 新增軟體源資訊
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務
sudo service docker start

# 注意:
# 官方軟體源預設啟用了最新的軟體,您可以通過編輯軟體源的方式獲取各個版本的軟體包。例如官方並沒有將測試版本的軟體源置為可用,你可以通過以下方式開啟。同理可以開啟各種測試版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   將 [docker-ce-test] 下方的 enabled=0 修改為 enabled=1
#
# 安裝指定版本的Docker-CE:
# Step 1: 查詢Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]複製程式碼

安裝校驗

root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false複製程式碼

2)、docker的解除安裝命令

#1.查詢安裝過的包
yum list installed | grep docker
#2.刪除安裝的軟體包
yum -y remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64 
#3.刪除映象/容器等rm -rf /var/lib/docker複製程式碼

五、docker常用命令&操作

  1. docker操作
  • 檢索 | docker search 關鍵字 eg:docker search redis
  • 拉取 | docker pull 映象名:tag
  • 列表 | docker images
  • 刪除 | docker rmi image-id

說明:我們經常去docker hub上檢索映象的詳細資訊,如映象的TAG。 :tag是可選的,tag表            示標籤,多為軟體的版本,預設是latest 檢視所有本地映象 刪除指定的本地映象

  2.容器操作

  • 搜尋映象 [root@localhost ~]# docker search tomcat
  • 拉取映象 [root@localhost ~]# docker pull tomcat
  • 根據映象啟動容器 docker run --name mytomcat【自命名】 -d tomcat:latest【映象名:標籤】 
  • docker ps 檢視執行中的容器 
  • 檢視所有的容器 docker ps -a
  •  停止執行中的容器 docker stop 容器的id【下圖紅色標註即為 docker ps命令查出的容器id】docker的學習總結
  • 啟動容器 docker start 容器id
  • 刪除一個容器 docker rm 容器id
  • 啟動一個做了埠對映的tomcat [root@localhost ~]# docker run -d -p 8888:8080 tomcat -d:後臺執行 -p: 將主機的埠對映到容器的一個埠 主機埠:容器內部的埠【下圖紅色標註即為主機埠與容器內部埠對映說明】docker的學習總結
  • 檢視容器的日誌docker logs container-name【容器名】/container-id【容器id】
  • 更多命令可以參考https://docs.docker.com/engine/reference/commandline/docker/ 也可以參考每一個映象的文件內部有高階命令操作。

六、安裝mysql操作例項

  1. 去docker hub 查詢所需映象和tagdocker的學習總結


  2. docker pull mysql【拉去映象】

  3. 參考docker hub 給出的啟動命令選擇相應的啟動方式docker的學習總結

    比如:

    [root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    ad10e4bc5c6a        mysql               "docker-entrypoint.sh"   4 seconds ago       Up 2 seconds        0.0.0.0:3306->3306/tcp   mysql02
    複製程式碼

  4. Navicat連線mysql資料庫報錯問題【client does not support authentication】

解決辦法:

  • docker ps -a 查詢到容器id/容器名
  • docker exec -it 容器id/容器名 bash 進入mysql容器 
  • mysql -uroot -p登陸mysql
  • use mysql【選擇mysql database】; 進入mysql
  • 查詢使用者表資訊:select host,user,authentication_string from user ;
  • 更改host為% user為root的使用者的authentication_string

    host為%方便遠端連線

    update user set authentication_string = 'root' where user = 'root' and host = '%';

    update user set authentication_string = 'root' where user = 'root' and host = 'localhost';

  • 如果還不行使用下面命令:                                                                                              alter user 'root'@'localhost' identified with mysql_native_password by '123456';

    alter user 'root'@'%' identified with mysql_native_password by '123456';

七、docker環境部署web專案
  1. 從docker hub 拉取Tomcat,並將打好的war包上傳之宿主機器一個目錄下:/home/dubbo-admin.war 啟動tomcat,並用瀏覽器訪問http://host_path:8080檢視tomcat啟動情況

    docker run -it --name dubbo-admin -d --rm -p 8080:8080 tomcat  
    複製程式碼

  2. 進入docker容器中,並檢視tomcat容器路徑

    docker exec -i -t <docker_name>  bash
    複製程式碼

  3. 將宿主機器的war包複製到docker容器中:

    #從主機複製到容器 
    sudo docker cp host_path(宿主機器路徑) containerID:container_path(容器路徑)
    
    #從容器複製到主機 
    sudo docker cp containerID:container_path host_path
    #例如
    sudo docker cp /home/dubbo-admin-2.6.war 603140acbd3c:/usr/local/tomcat/webapps
    複製程式碼

  4. 上述執行有個弊端就是 容器重啟後專案就會不再了,所以我們需要打包dubbo-admin映象

    #映象打包
    docker commit -m "提交資訊" -a  "作者" ${CONTAINER_ID}  ${NEW_IMAGE_NAME}
    複製程式碼