安装
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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker 安装和使用 - Python技术站