一、介绍
- docker容器是一种轻量级、可移植、自包含的软件打包技术,是一种应用程序,可以在几乎任何地方以相同的方式运行。
-
下载安装地址:
- https://hub.docker.com/
- windows下安装使用可能会有一些问题,参照弹出的链接,按照指引即可解决
-
配置国内镜像源:
-
具体镜像源可参考:
"registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://mirror.ccs.tencentyun.com", "https://reg-mirror.qiniu.com" ]
-
二、容器操作
-
运行容器
-
docker run 容器名
上述这是运行容器最简单的命令
- 常用参数
- -d:后台运行并返回ID名
- -it:以交互的模式打开容器
- -p:指定端口,比如-p 8888:3333,即暴露宿主机的8888端口,连接到docker容器的3333端口
- -v:目录挂载,用法(-v 宿主机绝对路径:docker中的路径)
- --name:指定容器名,否则会随机生成一个容器名
- --rm:运行完毕即删除该容器(通常用于测试)
- --network:指定网络
- --network-alias:给指定网络取别名
-
-
查看容器
docker ps -a #查看所有容器及其运行状态 docker ps -l #查看最近创建的容器及其运行状态 docker ps -q #仅显示容器的id
-
启动容器
docker start 容器id/name
-
停止容器
docker stop/kill 容器id/name
-
重启容器
docker restart 容器id/name
经历stop和start两个过程
-
暂停容器
docker pause 容器id/name
不会占用cpu
-
暂停后恢复运行容器
docker unpause 容器id/name
-
删除容器
docker rm 容器1,容器2,......
-
批量删除已退出容器
docker rm -v $(docker ps -aq -f status=exited)
-
查看容器中文件及目录变化
docker diff 容器id/name
-
从容器复制文件到本地
docker cp 容器id/名:容器中文件名 宿主机绝对路径
-
进入容器内部
docker exec -it 容器id/名 bash
输入exit退出终端,容器依旧在后台运行
三、镜像操作
-
查看镜像
docker images
-
搜索镜像
docker search 镜像名
-
删除镜像
docker rmi 镜像名
-
下拉镜像
docker pull 镜像名
-
查看镜像中的历史操作
docker history 镜像名
-
制作镜像
- 编写Dockerfile文件
FROM python:3.7.16-alpine MAINTAINER eliwang COPY . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "spider.py"]
- FROM:指定基础镜像,并且必须是第一条指令。
- MAINTAINER:作者
- COPY:将指定目录下的文件/目录,复制到容器中的指定目录下,目录不存在则自动创建
- WORKDIR:指定容器中的工作目录,容器开启后,默认在该目录下
- RUN:执行命令行命令(在docker build时运行)
- CMD:类似于RUN,执行时机不同(在docker run时运行)
- 其它常用命令:
- ADD:用法同COPY,在不解压的前提下,无法复制 tar 压缩文件,同种需求下推荐使用COPY
- EXPOSE:声明端口
- ENV:添加环境变量
- 创建镜像
docker build -t python:v1 .
-t参数指定(镜像名:tag),后面的"."不要忘了,表示Dockerfile文件所在目录
- 编写Dockerfile文件
-
发布镜像
- 注册账号、创建仓库
- 在docker hub上创建一个账号,然后创建一个测试仓库python
- docker中登录账号
docker login -u 用户名
然后输入密码
- 标记镜像
docker tag python:v1 elitewang/python:v1
语法:docker tag 镜像名:tag 账号/仓库:tag
- 发布镜像
docker push elitewang/python:v1
-
使用自己发布的镜像
docker pull elitewang/python:v1
- 注册账号、创建仓库
四、不同docker容器之间联通(以redis镜像和python爬虫镜像演示)
-
创建网络
docker network create mynet
指定网络名:mynet
-
网络中开启redis
docker run -d --name redis --network mynet --network-alias redis redis:7.0-alpine
通过--network指定网络,同时通过--network-alias给网络取别名,这样就可以在爬虫项目中指定host为该别名即可连接redis数据库
-
网络中开启爬虫项目
docker run --name myspider --network mynet -it -d -v E:\ProgramFiles\python_project\just_test\docker_test:/code python:v1
通过--network指定网络,通过-v挂载本地目录,可以同步修改项目中的改动
五、docker-compose多容器打包
-
用途
- 一个项目依赖多个docker容器时,可以利用docker-compose将多个容器进行打包执行
-
使用:(以上述redis和爬虫项目为例)
- 编写Dockerfile
FROM python:3.7.16-alpine MAINTAINER eliwang COPY . /code WORKDIR /code RUN pip install -r requirements.txt
- 编写docker-compose.yml
version: "2" services: myredis: image: redis:7.0-alpine networks: - mynet myspider: build: . volumes: - .:/code networks: - mynet links: - myredis tty: true networks: mynet: driver: bridge
- version:版本号,通常写“2”
- services:下边列出容器
- myredis容器:
- 通过redis:7.0-alpine这个镜像创建
- networks指定了网络mynet,这个必须与最下面networks声明的网络名一致
- myspider容器:
- build:指定了Dockerfile所在的路径
- volumes:挂载的目录
- networkds:指定所处的网络
- links:多容器连接别名,指定了上述myredis容器,所以在爬虫项目中,host需要指向"myredis"
- tty:保持后台运行不退出
- myredis容器:
- 创建并开启多容器(需要在docker-compose.yml所在目录下执行)
docker-compose up -d
-d参数可以让其在后台运行,不占用终端
- 停止并删除容器、网络
docker-compose down
- 编写Dockerfile
六、修改docker镜像安装目录
-
简介
- docker镜像默认会下载安装到C盘,占用C盘空间,我们可以手动修改其默认下载目录
-
操作
wsl --shutdown wsl --export docker-desktop-data E:\ProgramFiles\Docker\docker-desktop-data.tar wsl --export docker-desktop E:\ProgramFiles\Docker\docker-desktop.tar wsl --unregister docker-desktop-data wsl --unregister docker-desktop wsl --import docker-desktop-data E:\ProgramFiles\Docker\image E:\ProgramFiles\Docker\docker-desktop-data.tar wsl --import docker-desktop E:\ProgramFiles\Docker\bin E:\ProgramFiles\Docker\docker-desktop.tar
以修改后的镜像存放目录 E:\ProgramFiles为例,首先在该目录下新建文件夹Docker,然后按照上述命令依次执行即可
-
重启docker
- 执行
wsl -l -v
正常显示则表示迁移成功
- 执行