docker 学习笔记

docker 学习笔记

一、Windows 安装

下载链接:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

可能遇到的问题 :

​ 点击Docker QuickstartTerminal报错如下信息:

​ VBoxManage.exe startvm default --type headless failed: VBoxManage.exe: error: The virtual machine ‘default’ has terminated unexpectedly during startup with exit code 1 (0x1).

原因:VirtualBox安装过程出现问题或者版本不适配

解决方案:卸载VirtualBox,取较新版本重新安装

二、上手docker
1、hello world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBeR1rYl-1647393050005)(C:\Users\cosmo\AppData\Roaming\Typora\typora-user-images\image-20220315092010884.png)]

命令释义:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果

(如果本地没有该镜像, docker会自动从docker镜像仓库下载)

2、交互式创建容器

在这里插入图片描述

可在交互式bash中查看容器的版本信息:

在这里插入图片描述

exit退出交互式命令行

3、创建一个以进程方式运行的容器

在这里插入图片描述

通过 docker attach 或者 docker exec 进入容器(具体用法可以通过 --help 查看)

推荐使用 docker exec,因为它退出不会停止容器。

4、停止容器

5、导入导出

导出:docker export 容器ID > ubuntu.tar

导入:cat docker/ubuntu.tar | docker import - test/ubuntu:v1


在这里插入图片描述

三、镜像管理与创建

docker images 列出本地主机上的镜像

docker pull + 镜像名称 拉取镜像

docker search + 名称 查找镜像

docker rmi + 镜像名称 删除镜像

1、更新镜像:

从已经创建的容器中更新镜像,并且提交这个镜像

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • **e218edb10161:**容器 ID
  • runoob/ubuntu:v2: 指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

2、创建镜像:

使用 Dockerfile 指令来创建一个新的镜像

使用命令 docker build , 从零开始来创建一个新的镜像。创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......

参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
3、dockerfile 详解:

含义:Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:

FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz

构建时,在 Dockerfile 文件的存放目录下,执行构建动作,如命令:

docker build -t nginx:v3 .

. 是上下文路径,上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

dockerfile 命令:

  • FROM- 镜像从那里来

  • MAINTAINER- 镜像维护者信息

  • RUN- 构建镜像执行的命令,每一次RUN都会构建一层

  • CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

  • VOLUME- 定义数据卷,如果没有定义则使用默认

  • USER- 指定后续执行的用户组和用户

  • WORKDIR- 切换当前执行的工作目录

  • HEALTHCHECH- 健康检测指令

  • ARG- 变量属性值,但不在容器内部起作用

  • EXPOSE- 暴露端口

  • ENV- 变量属性值,容器内部也会起作用

  • ADD- 添加文件,如果是压缩文件也解压

  • COPY- 添加文件,以复制的形式

  • ENTRYPOINT- 容器进入时执行的命令

4、Compose:

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

下载地址:https://github.com/docker/compose/releases

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

yml 配置指令参考

version 指定本 yml 依从的 compose 哪个版本制定的。

build 指定为构建镜像上下文路径

cap_add,cap_drop 添加或删除容器拥有的宿主机的内核功能。

cgroup_parent 为容器指定父 cgroup 组,意味着将继承该组的资源限制

command 覆盖容器启动的默认命令

container_name 指定自定义容器名称,而不是生成的默认名称。

depends_on 设置依赖关系

deploy 指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。

devices 指定设备映射列表。

dns 自定义 DNS 服务器,可以是单个值或列表的多个值

dns_search 自定义 DNS 搜索域。可以是单个值或列表。

entrypoint 覆盖容器默认的 entrypoint。

env_file 从文件添加环境变量。可以是单个值或列表的多个值。

environment 添加环境变量

expose 暴露端口,但不映射到宿主机,只被连接的服务访问。

extra_hosts 添加主机名映射。类似 docker client --add-host。

healthcheck 用于检测 docker 服务是否健康运行。

image 指定容器运行的镜像

logging 服务的日志记录配置。

network_mode 设置网络模式。

restart 重启策略

secrets 存储敏感数据

security_opt 修改容器默认的 schema 标签。

stop_grace_period 指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。

stop_signal 设置停止容器的替代信号。默认情况下使用 SIGTERM 。

sysctls 设置容器中的内核参数,可以使用数组或字典格式。

tmpfs 在容器内安装一个临时文件系统。可以是单个值或列表的多个值。

ulimits 覆盖容器默认的 ulimit。

volumes 将主机的数据卷或着文件挂载到容器里。

5、镜像tag:

使用 docker tag 命令,为镜像添加一个新的标签

四、容器连接:
1、通过端口实现docker与容器的连接:

​ 启动容器时通过 -p 或者 -P 绑定端口号

2、通过docker实现容器之间的连接:

​ 创建 docker 网络: docker network create -d bridge test-net

​ 启动容器时指定网络:docker run -itd --name test1 --network test-net ubuntu /bin/bash

docker run -itd --name test2 --network test-net ubuntu /bin/bash

​ 两个容器可以互相 ping 通 name

五、仓库管理

https://hub.docker.com 创建自己 docker 账号

docker login 登录

docker push 将镜像推送到自己远端的 docker hub

六、常用参数
  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
  • -d: 以后台的形式创建一个容器
  • -P :是容器内部端口随机映射到主机的端口。
  • -p : 是容器内部端口绑定到指定的主机端口。
七、常用命令

docker 查看所有命令选项

docker logs + 容器ID 查看容器内标准输出

docker ps 查看有哪些容器在运行

docker ps -a 查看所有容器

docker run + 后续参数 启动容器

docker stop + 容器ID 停止容器

docker start + 容器ID 启动某个已经停止的容器

docker rm + 容器ID 删除容器

docker export 导出镜像

docker import 导入镜像

docker rmi + 镜像名称 删除镜像

八、Docker Machine

Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。

Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

九、Swarm 集群管理

Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

https://www.runoob.com/docker/docker-swarm.html

https://www.cnblogs.com/zhujingzhi/p/9792432.html

十、参考资料

https://www.bilibili.com/video/BV1og4y1q7M4?p=6

一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。

Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值