安裝
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 ./
有幾點注意
- ENV 是設置環境變量
- 可以用 ADD 取代 COPY,而 ADD 命令除了復制還會同時做解壓,甚至可以將 URL 文件下載並解壓
- 如果用 cd 命令改變目錄,這個設置只在當前 RUN 命令有效,要長久有效要用 WORKDIR
- 盡量不要寫多個 RUN,因為 RUN 命令實際上會增加一層鏡像
- EXPOSE 本身不會實際起作用,要等到 docker run 指定 -P (注意是大寫) 參數時才會映射 EXPOSE 指定的端口
- 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