docker
文章目录
一、docker 的安装
1、linux的安装
二、docker 的指令
1、docker镜像的使用
(1)docker images # 查看所有镜像, 列出本地主机上的镜像
# 结果展示
REPOSITORY TAG IMAGE ID CREATED SIZE
docker_demo v3 185b39e20cdb 3 hours ago 129MB
各个选项说明:
REPOSITORY # 表示镜像的仓库源
TAG # 镜像的标签
IMAGE ID # 镜像ID
CREATED # 镜像创建时间
SIZE # 镜像大小
# 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,
# 如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,
# 我们使用 REPOSITORY:TAG 来定义不同的镜像。
(2)# 获取一个新的镜像
docker pull ubuntu:13.10 # 指定版本 13.10
docker pull ubuntu # 不指定版本,下载最新的lasted
(3) # 查找镜像
docker search ubuntu
# 查询结果
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 12744 [OK]
# 返回字段说明
NAME: # 镜像仓库源的名称
DESCRIPTION: # 镜像的描述
OFFICIAL: # 是否 docker 官方发布
stars: # 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: # 自动构建。
(4)# 删除镜像
docker rmi <镜像id>
docker rmi 镜像名:镜像标签
(5)# 创建镜像
# 当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,
# 我们可以通过以下两种方式对镜像进行更改。
1、从已经创建的容器中更新镜像,并且提交这个镜像
2、使用 Dockerfile 指令来创建一个新的镜像,
# 使用dockerfile创建镜像参考下方dockerfile
(6)# 更新镜像
# 更新镜像之前,我们需要使用镜像来创建一个容器。
docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
我们可以通过命令 docker commit 来提交容器副本
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
各个参数说明:
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
# 可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
2、docker容器的使用
(1)docker # 查看docker的命令
(2)docker pull ubuntu # 获取镜像,# 不指定版本号,默认为lasted
(3)docker pull ubuntu:版本号 # 获取对应版本号的镜像
(4)docker run -it Ubuntu /bin/bash # 启动镜像,
-i 交互式操作
-t 终端
Ubuntu # Ubuntu镜像
/bin/bash # 放在镜像名后的是命令,交互式的shell,因此用的是/bin/bash
(4)操作结果 测试
➜ docker_demo : docker run -it --name docker_demo docker_demo:v3 /bin/bash
root@3957e0472ec4:/usr/local/docker_demo# ls # 运行之后,进入容器中,交互形式
dockerfile requirements.txt spider # 容器workdir的目录
root@3957e0472ec4:/usr/local/docker_demo#
root@3957e0472ec4:/usr/local/docker_demo# exit
exit
➜ docker_demo # 退出终端
(5)docker ps -a # 查看所有容器命令,包含启动已停止运行的容器
(6)docker ps # 查看所有正在运行的容器
(7)docker start 3957e0472ec4 # 3957e0472ec4 镜像id, 启动一个已经停止的容器
(8)# docker服务在后台运行, -d 指定容器的运行模式
docker run -itd --name docker_demo docker_demo:v3 /bin/bash
# 注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
(9)# 停止容器
docker stop <容器id>
(10)# 停止的容器可以通过restart重启
docker restart <容器id>
(11)# 进入容器, 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
docker attach # 以attach形式进入终端,退出终端后,导致容器停止
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止
# 测试 容器id:3823cfae385c
➜ docker_demo: docker exec -it 3823cfae385c /bin/bash
root@3823cfae385c:/usr/local/docker_demo# ls # 已进入容器中
dockerfile requirements.txt spider
root@3823cfae385c:/usr/local/docker_demo#
root@3823cfae385c:/usr/local/docker_demo# exit
exit
➜ docker_demo : # 已退出终端,退出终端, exec未导致容器停止
(12)# 导出和导入容器, 如果要导出本地某个容器,可以使用 docker export 命令。
docker export 3823cfae385c > docker_demo_contain.tar
# 导出容器 3823cfae385c 快照到本地文件 docker_demo_contain.tar。
# 可以使用 docker import 从容器快照文件中再导入为镜像,
# 以下实例将快照文件 docker_demo_contain.tar 导入到镜像 test/docker_demo:v4
cat docker/docker_demo_contain.tar | docker import - test/docker_demo_contain:v4
# 此外,也可以通过指定 URL 或者某个目录来导入,例如
docker import http://example.com/exampleimage.tgz example/imagerepo
(13) # 删除容器使用 docker rm 命令
docker rm -f <容器id>
# 例如
docker rm -f 1e560fca3906
# 注意:删除容器时,容器必须是停止状态,否则会报如下错误
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
# 先停止容器,然后再删除即可
(14)# 查询最后一次创建的容器
docker ps -l
(15)# 容器端口映射, -p 宿主机:容器
docker run -d -p 5000:5000 training/webapp python app.py
三、dockerfile
1、文件指令
FROM #(指定基础镜像), 基础镜像可以为centos,python, alphin,
# 例如:FROM python:3.8-slim 基于python的一个镜像
MAINTAINER # (指定维护者信息,可以没有) #标明著作人的名称和邮箱
# 例如:MAINTAINER lijing lambdajing@163.com
LABLE # 描述,标签
RUN # 你想让它干啥(在命令前面加上RUN即可)
ADD # 给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
COPY # 复制文件(不会解压)rootfs.tar.gz, 需要指定解压
WORKDIR # 我是cd,今天刚化了妆(设置当前工作目录)
# 例如:WORKDIR /usr/local/docker_demo
VOLUME # 给它一个存放行李的地方(设置卷,挂载主机目录)# 设置宿主机的挂在地址
EXPOSE # 它要打开的门是啥(指定对外的端口)(-P 随机端口)
ENV # 环境变量(密码,其他信息)
CMD # 1、入口(指定容器启动后的要干的事情)(容易被docker run 后指定的启动命令替换)
# 2、如果有多个CMD存在,则只执行最后一个CMD
ENTRYPOINT # 入口1、容器启动后执行的命令(无法被docker run 后指定的启动命令替换,
# 2、启容器的时候指定的命令(docker run 后指定的启动命令),会被当成参数)
# 3、如果CMD与ENTRYPOINT同时存在,则CMD的命令会被当成ENTRYPOINT的参数
2、dockerfile 例子
# 基础镜像
FROM python:3.8-slim
#标明著作人的名称和邮箱
MAINTAINER lijing lambdajing@163.com
# 当前工作目录
WORKDIR /usr/local/docker_demo
# 挂在地址
VOLUME /home/lijing-home/docker_demo
COPY . /usr/local/docker_demo/
# 执行命令,安装包
RUN pip install -r /usr/local/docker_demo/requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 启动入口
CMD ["python", "/usr/local/docker_demo/spider/spider_aiqicha.py"]
3、dockerfile 构建镜像命令
# docker_demo:v1 --> 镜像名:标签
(1)docker build -t docker_demo:v1 .
# 注意: 后方的 ”.“ 不可少
# 如果(1)成功返回successful
(2)docker imags
# 查看镜像是否存在构建的镜像,
(3)# 运行镜像,查看运行是否正常
docker run docker_demo:v1
3、保存构建后的镜像
(1) docker save -o docker_demo.tar docker_demo:v1
# docker_demo.tar 镜像tar文件,docker_demo:v1 镜像名与标签
4、加载镜像的tar文件
(1) docker load --input docker_demo.tar
# docker_demo.tar为镜像的tar文件
5、加载成功后, 查看镜像是否加载成功
# 查看镜像是否在镜像里
docker images
四、dockercompose