Docker學習筆記

Docker筆記

概述

  • Docker是一種容器級虛擬化技術。
  • Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上。
  • 關於虛擬機,官方的說法是:虛擬機(Virtual Machine)指經過軟件模擬的具備完整硬件系統功能的、運行在一個徹底隔離環境中的完整計算機系統。
  • 容器技術也能實如今一臺硬件機器上虛擬出多個容器,每一個容器中均可以放置一個互相隔離的服務器。因此,咱們知道,容器其實也採用的是虛擬的方式進行,只不過,同等條件下,容器技術會比虛擬機技術效率要高,可是容器中沒有包含獨立的操做系統,虛擬機中包含獨立的操做系統,因此每臺虛擬機中的功能會比每一個容器的功能要多些,正由於虛擬機帶有不少東西,因此佔的系統資源要大,效率要低些。

安裝

因爲apt官方庫裏的docker版本可能比較舊,因此先卸載可能存在的舊版本
sudo apt-get remove docker docker-engine docker-ce docker.io

更新apt包索引
sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方的GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

安裝最新版本的Docker CE
sudo apt-get install -y docker-ce

驗證
sudo service docker status
sudo docker run hello-world

三大核心組件

一、Docker images

​ 也叫作Docker鏡像,鏡像通常是隻讀模版,用戶不能夠直接對其進行寫入操做。使用鏡像能夠很輕鬆地建立容器。 鏡像目的也就是更好的保證數據的安全。html

二、Docker containers

也叫作Docker容器,容器與容器之間互相隔離、互不干擾,容器能夠進行被開始、啓動、中止、刪除等操做。linux

開發者能夠快速地把本身的應用打包到容器中進行發佈。nginx

三、Docker registries

也叫作Docker倉庫,主要是用來下載和上傳鏡像的,倉庫分爲公有倉庫和私有倉庫。git

Dockerfile文件

看吧!web

基礎命令

進入容器內操做

docker exec -it 容器ID/名字 /bin/bashredis

這時 top 命令看到的只有當前容器運行的程序;進入容器後,能夠進行操做等。docker

exit 退出ubuntu

查看容器

運行中:docker ps安全

全部:docker ps -abash

查看鏡像

docker images

刪除容器

docker rm ID

刪除全部容器
docker rm $(docker ps -a -q)

刪除鏡像

須要先刪除容器

docker rmi (-f) ID

拉取鏡像

docker pull 用戶名/鏡像名

運行容器

docker run -d \
--name nginx_container \
-p 80:80  \
-v /data:/data \
--restart=always \
nginx

中止容器

中止全部容器
docker stop $(docker ps -a -q)

構建鏡像

首先編寫Dockerfile文件,而後用docker build來構建鏡像

docker build -t my_own_nginx:v1 .

修改鏡像標籤

docker tag my_own_nginx:v1 nginx:socv1

實時查看容器日誌

docker logs -f container_id

刪除全部鏡像

docker image rm -f $(docker image ls -q)

Docker-compose筆記

概述

  • 咱們使用 Docker 的時候,首先定義 Dockerfile 文件,而後使用 docker build、docker run 等命令操做容器。然而微服務架構的應用系統通常包含若干個微服務,若是每一個微服務都要手動啓停,那麼效率之低,維護量之大可想而知
  • Docker-Compose是Docker官方的開源項目,使用它能夠輕鬆、高效的管理容器,它是一個用於定義和運行多容器 Docker 的應用程序工具

安裝

pip3 install docker-compose
docker-compose --version

docker-compose文件

  • Compose模板文件可使用.yml或.yaml做爲文件擴展名,默認路徑是當前目錄下的docker-compose.yml,如需指定其餘文件名,請使用 -f 參數。
  • 標準模板文件應該包含 version、services、networks 三大部分,最關鍵的是 services 和 networks 兩個部分。

image

​ image是指定服務的鏡像名稱或鏡像ID。若是鏡像在本地不存在,Compose將會嘗試拉取鏡像。

version: '3.7'

services:
  icp:
    image: harbor.socmap.org/bs-icp/icp:v0.0.3

build

構建鏡像,指定一個Dockerfile文件路徑

  • context
    • 能夠是Dockerfile的文件路徑,也能夠是到連接到git倉庫的url,當提供的值是相對路徑時,被解析爲相對於撰寫文件的路徑,此目錄也是發送到Docker守護進程的context
  • dockerfile
    • 文件名
version: '3.7'

services:
  icp:
    build:
      context: ./services/icp
      dockerfile: Dockerfile

volumes

映射一個目錄。格式:宿主機:容器內

例如:容器運行,須要存取驗證碼圖片,映射容器路徑/usr/src/app/project/captcha到宿主機/home/workspace/files/captcha,容器內,凡是使用前者保存的圖片都會存儲到後者目錄。

version: '3.7'

services:
  icp:
    volumes:
      - '/home/workspace/files/captcha:/usr/src/app/project/captcha'

ports

​ 用於映射端口。

  • 宿主機暴露端口:容器啓動端口
  • 或只指定容器的端口,宿主機會隨機映射端口
version: '3.7'

services:
  icp:
    ports:
      - 5033:5000

expose

暴露端口給link到當前容器的容器。不會將端口暴露給宿主機。

例如:將端口8887暴露給link到本容器的容器

version: '3.7'

services:
  icp:
     expose:
      - 8887

env_file

一個專門存放變量的文件。若是有變量名稱與environment指令衝突,則之後者爲準。

version: '3.7'

services:
  icp:
    env_file:
      - name.env

environment

添加環境變量。

version: '3.7'

services:
  icp:
    environment:
      - FLASK_ENV=development

restart

重啓容器。默認爲 no

  • no
  • always,老是重啓
  • on-failure,在容器非正常退出時(退出狀態非0),纔會重啓容器
version: '3.7'

services:
  icp:
    restart: always

networks

配置網段。

version: '3.7'

services:
  icp:
    networks:
      - defnet

networks:
  defnet:
    ipam:
      driver: default
      config:
        - subnet: "172.68.0.0/16"

depends_on

解決容器服務間相互依賴、啓動順序的問題。

例如:下面容器會先啓動 redis 和 db 兩個服務,再啓動 icp 服務

version: '3.7'

services:
  icp:
    depends_on:
      - db
      - redis
      
  redis:
    image: redis
    
  db:
    image: postgres

解決的是容器間鏈接問題。容器間能夠經過名稱相互訪問

  • 服務名稱:別名
  • 如不指定別名,服務名稱做爲別名

例如:web 容器須要使用到 db 容器的 postgres 服務,web 容器以別名 database 爲 hostname訪問 db 服務

version: '3.7'

services:
  web:
    links:
      - db:database
      
  db:
    image: postgres

command

覆蓋容器啓動後默認執行的命令。

version: '3.7'

services:
  celery:
    command: celery -A app.celer.base worker -l info

基礎命令

啓動容器

  • -d 後臺啓動
  • -f 指定 docker-compose 文件
  • --build 重構鏡像

docker-compose up

docker-compose up -d

docker-compose -f docker-compose-dev.yml up -d –build

拉取鏡像

docker-compose -f docker-compose-deploy.yml pull

官方DockerHub的使用

1,登陸

docker login -u username -p password

2, 本地構建鏡像,鏡像名要與dockerhub倉庫名相同,默認使用.目錄下的Dockerfile文件

docker build -t username/blog:v0.0.1 .

3, 推送到dockerhub

docker push username/blog:v0.0.1

相關文章
相關標籤/搜索