docker學習筆記整理

1、理解

1.1 docker 是什麼

  • 開源的軟件部署解決方案
  • 輕量級的應用容器框架
  • 可以打包、發佈、運行任何應用

1.2 docker 學習網站推薦

1.3 docker 的核心概念

  • 倉庫(Repository)
    • 用於存放鏡像文件
    • docker 倉庫有很多個,如國內的阿里雲、網易雲、DaoCloud、國外的docker hub、Quay等,選擇合適的倉庫,可以提高資源獲取效率 docker
    • 倉庫中存在很多不同的鏡像,如:centos6、centos7、ubuntu10、buntu11、jeinkins、python、mysql、php、tomcat、apache等等
  • 鏡像(Image)
    • 類似於rar、zip的壓縮包,我們可以將一系列文件統一打包成一個壓縮文件,方便傳輸、下載和使用
    • 鏡像文件是可讀的;運行容器時,只是在鏡像上面創建了一個可寫層,而鏡像本身不會發生變化
    • 例如我們可以從 docker 倉庫中下載 centos6、 jenkins 等鏡像;
  • 容器(container)
    • 容器 = 鏡像+ 讀寫層; 可以理解爲 java 的類和對象, 鏡像是類,容器是對象。
    • 一個鏡像可以創建很多個容器, 並且這些容器都可以獨立運行,任何一個停掉也不會影響另一個

1.4 docker 的優點

  • 高效構建應用——使用命名一鍵式部署
  • 快速交付和部署——搭配jenkins持續集成
  • 遷移擴展性強——將容器打包成鏡像,移植到新的機器上
  • 更新管理方便——使用可視化工具管理(如:protainer)
  • 啓動速度快——秒級
  • 同時支持上千個容器
  • 隔離性強——各個容器互不干擾

2、安裝 (centos 爲例)

  1. 安裝所需軟件包: yum install -y yum-utils device-mapper-persistent-data
    lvm2
  2. 設置倉庫:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. 安裝Docker Engine-Community: yum install docker-ce docker-ce-cli containerd.io
  4. 列出可用版本: yum list docker-ce --showduplicates | sort -r
  5. 安裝: yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
  6. 啓動docker: systemctl start docker
  7. 驗證安裝成功: docker run hello-world

3、容器使用常用命令

  • 運行容器:docker run -i -t ubuntu:15.10 /bin/bash
    • -i 交互式運行
    • -t 終端模式
    • -d 後臺運行(不會進入容器) 如:docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo working; sleep 60;done”
    • -P 容器端口映射到主機隨機端口
    • -p 容器端口映射到主機指定一個端口 (如加了ip,則默認爲 tcp 端口, 如果要綁定udp 端口, 需要在端口後加上 /udp)
    • –name 命名容器
    • –dns=8.8.8.8 指定dns
  • 進入後臺容器: docker attach 或者 docker exec ( exec 退出容器時,容器不會停止)
  • 退出交互式容器:ctrl + D 或者 exit 退出交互式容器
  • 啓動容器: docker start name 或者 docker start id
  • 停止容器: docker stop name 或者 docker stop id
  • 重啓容器: docker restart name 或者 docker restart id
  • 導出容器: docker export 1e5 > /dev/ubuntu.tar
  • 導入容器:cat /dev/ubuntu.tar | docker import - test/ubuntu:v1 (將
    ubuntu.tar 導入到頸項 test/ubuntu:v1
  • 導入容器: docker import http://example.com/exampleimage.tgz
    example/imagerepo 通過URL 導入
  • 刪除容器:docker rm -f id (刪除前要先停止運行)
  • 清除所有終止的容器:docker container prune
  • 端口查看: docker port id/name
  • 查看狀態: docker ps 或 docker ps -a (-a 展示所有運行過的容器 -l 顯示最後一個運行的容器)
  • 查看運行日誌: docker logs name/id 或 docker logs -f name/id ( -f
    持續標準輸出)
  • 查看容器進程: docker top id/name
  • 查看容器底層信息: docker inspect id/name
  • 與宿主機傳文件: docker cp container_id:/root/test /root (容器 拷貝到宿主機)

4、關於鏡像的命令

  1. 列出本機鏡像:docker images ( 使用 docker run 運行鏡像)
  2. 預下載鏡像: docker pull 鏡像名
  3. 搜索鏡像: docker search httpd
  4. 刪除鏡像: docker rmi hello-world
  5. 更新鏡像: 進入容器終端,使用 apt-get update ; 然後退出終端,使用 docker commit -m=“comments” -a=“author” 容器id 目標鏡像名 提交鏡像
  6. 創建鏡像:
    1、 從已經創建的容器更新鏡像,再提交;
    2、使用 dockerfile 創建新鏡像
  7. 構建鏡像:創建Dockerfile 文件, 通過 docker build 執行Dockerfile 來構建鏡像
$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
$ docker build -t runoob:centos:6.7 /root     # /root 爲Dockerfile 所在位置 
  1. 設置鏡像標籤 : docker tag image_id tag_name

5、實例之運行一個web應用容器

$ docker pull training/webapp     # 載入鏡像
$ docker run -d -P training/webapp python app.py    # -d 後臺運行   -P 端口映射到主機的隨機一個端口
$ docker ps
$ docker run -d -p 5000:5000 training/webapp python app.py    # -p   端口映射到主機的指定一個端口

6、容器連接

$ docker network create -d bridge test-net  # -d 指定網絡類型爲 bridge

# 後臺運行2個容器 test1、 test2 ,指定網絡爲 test-net
$ docker run -id --name test1 --network test-net centos  /bin/bash
$ docker run -id --name test2 --network test-net centos  /bin/bash

# 查看test1、tesst2 運行正常
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
428af62a7e37        centos              "/bin/bash"         7 minutes ago       Up 7 minutes                                 test2
879f20b21768        centos              "/bin/bash"         7 minutes ago       Up 7 minutes
                                 test1
# 驗證 test1、test2 網絡互通
$ docker exec -it test1 /bin/bash
$  ping  test2 

7、 docker 可視化工具

這裏推薦portainer (docker ui 沒有賬號權限控制,功能簡單,沒命令號; k8s 需要多臺機器部署):

$ docker pull portainer/portainer
$ docker run -id --name protainer  -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer  #單機版
$ #集羣版:
$ docker run -id --name portainer -p 9000:9000 --restart=always portainer/portainer
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章