Docker 安裝和使用


安裝

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh    or   sudo sh get-docker.sh --mirror Aliyun
sudo usermod -aG docker your-user

最好用國內的源,國外的源容易卡,容易安裝失敗

常用命令

下載鏡像,如果不指定版本的話,默認用 latest

sudo docker pull ubuntu:18.04

默認是到 docker 的官方 registry 下載鏡像,有可能很慢,可以改變默認配置

創建或修改文件 /etc/docker/daemon.json,添加以下內容

{
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}

重啟服務

systemctl daemon-reload
systemctl restart docker

重新 pull 速度就快了很多


可以在 pull 的時候指定 registry

docker pull URL/ubuntu:18.04

registry 有可能要求先登陸

docker login URL/ubuntu:18.04


查看本地已有的鏡像

sudo docker images


刪除鏡像

sudo docker rmi ubuntu:18.04


啟動容器

sudo docker run -i -t ubuntu:18.04 /bin/bash

如果本地沒有相應的鏡像,會自動到默認 registry pull
/bin/bash 是容器啟動后執行的命令,可以是任何命令
-i -t 表示使用交互式終端,配合 /bin/bash 命令相當於是登陸了容器


后台運行 -d

sudo docker run -t -i -d ubuntu:18.04 sleep 10


共用宿主機網絡,修改主機名

docker run --network host --hostname docker_test -i -t -d ubuntu:18.04 /bin/bash


查看容器狀態

docker ps -a


連上正在運行的容器 (連上容器啟動命令的標准輸出輸入)

docker attach c93b8664bad3


連上正在運行的容器 (啟動新命令)

docker exec -t -i c93b8664bad3 /bin/bash


停止和刪除容器

docker stop c93b8664bad3 
docker rm c93b8664bad3 


刪除所有處於 stop 狀態的容器

sudo docker container prune


端口映射

docker run --network host -d -i -t -p 9000:9000 ubuntu:18.04 /bin/bash


設置環境變量

docker run --network host -d -i -t -e "env_1=test_1" -e "env_2=test_2" ubuntu:18.04 /bin/bash


查看標准輸出日志

docker logs c93b8664bad3


查看容器信息

docker inspect c93b8664bad3


將正在運行的容器創建成新的鏡像

docker commit -m="Docker Test" -a="lin" c93b8664bad3 ubuntu_18_04_test:v1


將創建的鏡像推到 registry

docker push ubuntu_18_04_test:v1


導出導入容器

docker export -o [file] [container_id]
docker import [file] [command]


導出導入鏡像

docker save -o ubuntu_18_04_test.tar ubuntu_18_04_test:v1
docker load -i ubuntu_18_04_test.tar


通過 Dockerfile 創建鏡像

# cat ./Dockerfile
FROM ubuntu_18_04_test:v1

USER root

ENV env_name "test"

COPY flask_test.tar.gz /opt
WORKDIR /opt

RUN tar -xvf flask_test.tar.gz \
    && rm flask_test.tar.gz

WORKDIR /opt/flask_test
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

EXPOSE 8000

CMD gunicorn -c gunicorn_config.py flask_test:app
docker build --network host -t ubuntu_flask_test:v1 ./

有幾點注意

  1. ENV 是設置環境變量
  2. 可以用 ADD 取代 COPY,而 ADD 命令除了復制還會同時做解壓,甚至可以將 URL 文件下載並解壓
  3. 如果用 cd 命令改變目錄,這個設置只在當前 RUN 命令有效,要長久有效要用 WORKDIR
  4. 盡量不要寫多個 RUN,因為 RUN 命令實際上會增加一層鏡像
  5. EXPOSE 本身不會實際起作用,要等到 docker run 指定 -P (注意是大寫) 參數時才會映射 EXPOSE 指定的端口
  6. CMD 指定容器的啟動命令,如果 docker run 有帶啟動命令,CMD 指定的命令會被忽略,如果是通過 ENTRYPOINT 指定,那即使 docker run 有帶啟動命令也無法覆蓋



docker-compose

安裝

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

下載 docker-compose 需要FQ,可以找國內的網站下載,比如 http://get.daocloud.io/

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

官網 https://docs.docker.com/compose/ 的介紹如下

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

就是一個可以配置管理多個容器的工具

先定義一個 docker-compose.yml 文件

version: '2.0'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

這個配置文件定義了兩個容器,一個 redis,直接使用現成的鏡像,一個 web,通過 dockerfile 生成

通過下面的命令可以依據配置文件啟動和停止這兩個容器

docker-compose up
docker-compose down

可以通過指定文件啟動多個配置

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

docker-compose 可以做很多配置,看起來有點像 K8S 的 pod


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM