Docker 深入浅出

Docker 概述

Docker 为什么会出现

我们在学习 Docker 之前,可以先来思考一下 Docker 为什么会出现?

如果大家已经接触过编程,并且自己上线过项目。可能会遇到一个问题,就是自己在本地的开发环境和线上的环境不一致,导致出现一些奇奇怪怪的问题。最常见的就是本地是用 Windows 做开发,而线上服务器是 Linux 操作系统。

如果大家在公司做开发,也会经常听到一句,我在我的电脑上可以运行啊!是不是你的配置有问题啊!如果只配置一台服务器还好,但是现在很少有公司只有一台服务器.....,所以大家经常会见到开发与运维相互推锅.....

而 Docker 的出现正好可以解决这个问题,开发部署一套流程做完。

Docker 前世今生

在 Docker 出现前,难道就没有解决方案吗?答案肯定是有的,就是虚拟机。

但是虚拟机的缺点也是比较明显的,首先就是资源占用比较多,启动慢,冗余的步骤多,这些都是使用虚拟机的缺点。

由于虚拟机的缺点,Linux 出现了另一种技术,就是 Linux 容器,Linux 容器并不是一个完整的操作系统,是对进程进行隔离。它解决了虚拟机启动慢,资源占用多的问题。容器可以理解为轻量级的虚拟机。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

Docker 优势

  • 应用更快速的交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的利用计算机资源

Docker 的基本组成

图片来自:Docker 组成

从图中可以看出 Docker 可以分为三部分组成,分别是 client(客户端),docker_host(服务器),registry(仓库)。

这里重点说下服务器中的组成,images(镜像)、containers(容器)。

  • 镜像(image):Docker 镜像好比是一个模板,可以通过这个模板来创建容器服务
  • 容器(container):Docker 利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。
  • 仓库(repository):仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库

安装 Docker

如果大家觉得安装比较麻烦,想直接学习的话,可以用在线的 Docker 环境:

https://labs.play-with-docker.com/

但还是推荐大家自己安装,毕竟身为一个程序员这是最基本的能力。

  • 官网:https://www.docker.com/
  • 文档地址:https://docs.docker.com/
  • 仓库地址:https://hub.docker.com/

这几个网站大家也可以收藏一下,尤其是官网。如果大家的 xshell 过期,推荐大家用 FinalShell。

这里我用 centos7 来跟大家演示安装 Docker。。

1.卸载老的版本

sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine

2.需要的安装包

sudo yum install -y yum-utils

3.设置镜像的仓库

# 默认是从国外的sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 配置阿里云 Docker 镜像地址,这样可以让我们后面下载速度更快,推荐大家用国内的镜像sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.1.更新软件包索引

yum makecache fast

4.安装 Docker

docker-ce 是社区版 docker-ee 是企业版的(收费)sudo yum install docker-ce docker-ce-cli containerd.io

5.启动 Docker

sudo systemctl start docker

5.1.查看 Docker 版本

docker version

6.测试 hello world

sudo docker run hello-world

如果能看到以下界面说明安装成功。

如果大家是 Ubuntu 的操作系统,可以参考这个文档进行安装:

https://docs.docker.com/engine/install/ubuntu/

大家在虚拟机中安装完 Docker,关闭虚拟机再次打开虚拟机的时候,可能在敲一些命令的时候,发现会有一个提示:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

这个提示就是 Docker 没有启动,Docker 是没有默认启动的,需要通过命令开启 systemctl start docker 这个命令是 centos 下的命令。

Docker 常用命令

帮助命令

docker  --help        帮助文档,开始大家对 Docker 命令不熟悉的时候,可以通过帮助命令来快速了解命令

显示 Docker 的详细信息

docker info

镜像命令

镜像简介:镜像是一个 Docker 的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等

通过镜像可以创建一个或多个容器

查看所有本地的主机上的镜像

咱们可以先用 Docker 帮助命令查看镜像的命令

先来解释一下 Docker 的帮助文档是什么意思,Usage 就是 docker images 的用法,后面 [OPTIONS] 是 docker images 这个命令可以跟的一些选项,[REPOSITORY[:TAG]] 是镜像的仓库源及镜像的标签。

下面 Options 是命令的选项,这里以 -a 来跟大家举例。

docker images -a     # 显示所有的镜像
docker images -q # 只显示镜像 ID

大家在接下来的学习,也可以按照我的这种方法来学习,先查看帮助命令,根据帮助命令的提示,来学习 Docker 中的常用命令,因为帮助命令的提示是官方给的,这比看任何教程来的都直接。

镜像搜索

第一种方法:可以通过 Docker 镜像仓库搜索:

https://hub.docker.com/

这个网站需要大家注册一下。

我这里搜索的是 MySQL,下面就会出现 MySQL 相关的镜像,大家可以点进去查看这个镜像的详细信息。

第二种方法:是通过 Docker 的命令来进行搜索。

docker search [OPTIONS] TERM

这里还是搜索 MySQL 为例:

加上 --limit 5 限制搜索最大数量:

镜像下载

如果通过镜像搜索到想用的镜像,接下来就应该把镜像下载下来,那如何下载镜像呢?

下载镜像命令

docker pull

查看下载帮助文档

以MySQL为例

[root@localhost ~]# docker pull mysqlUsing default tag: latest       # 如果不写 tag, 默认就是 latestlatest: Pulling from library/mysqlf7ec5a41d630: Pull complete         # 分层下载,docker image 的核心 联合文件系统9444bb562699: Pull complete 6a4207b96940: Pull complete 181cefd361ce: Pull complete 8a2090759d8a: Pull complete 15f235e0d7ee: Pull complete d870539cd9db: Pull complete d44467b42d4c: Pull complete ae6d21974457: Pull complete be4ff89fec0f: Pull complete 2c9b0d7f6e0f: Pull complete c6fb9ccf35d9: Pull complete Digest: sha256:cd42db5e061f8d1b1854e5fe597ad7ab9b9a5198ca1a2a560e5c4135b2d2b005 # 签名信息Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest      # 真实地址

大家可以看到如果不指定镜像的版本,默认是下载最新的版本。

指定版本的镜像下载命令:

docker pull mysql:5.7 # 指定的版本一定在仓库中存在

以 MySQL 5.7 版本为例:

[root@localhost ~]# docker pull mysql:5.75.7: Pulling from library/mysqlf7ec5a41d630: Already exists 9444bb562699: Already exists 6a4207b96940: Already exists 181cefd361ce: Already exists 8a2090759d8a: Already exists 15f235e0d7ee: Already exists d870539cd9db: Already exists cb7af63cbefa: Pull complete 151f1721bdbf: Pull complete fcd19c3dd488: Pull complete 415af2aa5ddc: Pull complete Digest: sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7

如果下载的镜像不存在,Docker 会报错:

[root@localhost ~]# docker pull mysql:9.0Error response from daemon: manifest for mysql:9.0 not found: manifest unknown: manifest unknown

删除镜像

删除镜像命令:

docker rmi 

查看删除命令帮助文档:

图中的 IMAGE 可以写镜像的名字,也可以写镜像的 ID,但我们通常写的都是 ID,因为名字可能会有一样的,一样的镜像不同的版本,镜像的名字就是一样的,大家可以看下刚才下载的两个 MySQL 镜像,所以想准确删除某一个镜像最好用镜像的 ID。

选项 -f是强制删除,这个选择我们后面会经常使用

对于已经运行起来的镜像,是没有办法直接删除的,这时候可以加上 -f 参数,强制删除。对于刚才下载的 hello-world 镜像,是没有办法删除的。这里为什么 hello-world 镜像下载下来就是运行状态,后面讲到容器的时候,在来跟大家解释。

查看镜像详细信息

查看镜像详细信息命令:

docker image inspect 镜像

帮助文档

[OPTIONS]后面的IMAGE同样也是写 ID 或者镜像名字。

查看MySQL镜像的详细信息

docker image inspect mysql

这里面展示的信息比较多,大家可以自行查看。这里也可以用管道命令来进行过滤

docker image inspect mysql | grep Created

容器命令

我们有了镜像才可以创建容器,这里我们下载一个 centos 镜像来学习

docker pull centos

docker run (创建并启动容器)

创建容器并启动

docker run image

查看帮助文档

run 命令的选项特别多,常用可选参数说明:

* -i 表示以《交互模式》运行容器。* -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。* --name 为创建的容器命名。* -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 * -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 * -p 表示端口映射,即宿主机端口:容器中端口。* --network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。

命令演示

docker run -it centos /bin/bash

这时会进入 centos,但是这个 centos 是一个基础版本,很多的命令都是不完善的,但是大家可以看到 Linux 中的目录是有的。

想要退出这个容器,通过exit这个命令就可以了。exit退出容器会让容器停止运行并退出,如果不想停止容器只想退出容器,可以通过ctrl + p + q,这样可以只退出容器,容器不停止运行。

守护式容器,也可以理解为后台启动

sudo docker run -dit --name=centos  centos      # --name 是为创建的容器命名

这里主要讲解-i,-t,-d参数,剩下的参数我们会在后面的知识中讲解。

容器列表命令

# 查看正在运行的容器sudo docker container ls# 查看所有的容器sudo docker container ls --all # --all 和-a 是等价的# 查看最近创建的一个容器docker ps -n 1# 显示容器的 IDdocker ps -a -q # 还可以把-aq 连起来

停止和启动容器

# 停止容器sudo docker container stop 容器名或容器 id# kill 掉容器,强制停止sudo docker container kill 容器名或容器 id# 启动容器sudo docker container start 容器名或容器 id

进入容器内部

如果容器运行起来,想要进入容器内部可以通过两种方式

方式一

命令:sudo docker exec -it 容器名或容器 id 进入后执行的第一个命令例子:sudo docker exec -it ubuntu2 /bin/bash

方式二

docker attach 4cee8bceb42e      # 4cee8bceb42e 容器 ID[root@4cee8bceb42e /]# lsbin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

命令总结

常用命令总结:常用命令总结

镜像原理

Docker 镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)

Union 文件系统(UnionFS) 是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层文件和目录。

Docker 镜像加载原理

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是联合文件系统(UnionFS)。

bootfs(boot file system—>boot 文件系统) 主要包含 bootloader(boot 加载器)和 kernel(内核),其中 boot 加载器主要是用来引导加载内核。Linux 刚启动时会加载 bootfs(boot 文件系统),在 Docker 镜像的最底层是 bootfs(boot 文件系统)。这一层与典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就存在内存中了,此时内存的使用权已由 bootfs(boot 文件系统)转交给内核,此时系统就会卸载 bootfs(boot 文件系统)。

roorfs (root file system—>root 文件系统),在 bootfs(boot 文件系统)之上。包含的就是典型 Linux 系统中的 /dev ,/proc,/bin ,/etc 等标准的目录和文件。rootfs(root 文件系统)就是各种不同的操作系统发行版,比如 Ubuntu,Centos 等等。

容器与镜像的关系

图片来自:容器与镜像的关系

容器提交

作用:根据容器生成一个新的镜像

命令格式

docker commit [options]

参数

-a      作者 -c      为创建的镜像加入 dockerfile 命令-m      提交信息    类似于 git commit -m-p      提交时暂停容器

命令演示

# 后台运行 centos 容器docker run -itd centos bash# 在容器中安装 net-toolsdocker exec 容器 id yum install -y net-tools# 查看容器 ipdocker exec 容器 id ifconfig

生成新的容器

docker commit -m 'install net-tools' 5fc385085663 centos-net:v1.0docker images

容器导出

作用:将容器当前的文件系统导出成一个 tar 文件

命令格式

docker export [options] container

命令参数:

-o 指定写入的文件,默认是 STDOUT

命令演示

[root@localhost ~]# docker export dc8d8f9ad2fa -o centos-tar.tar

容器导入

作用:从一个 tar 文件中导入内容创建一个镜像

命令格式

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

命令参数

-c 为创建的镜像加入 dockerfile 命令-m 导入时,添加提交信息

命令演示

[root@localhost ~]# docker import -m 'import images' centos-tar.tar  centos-tar:v1.0sha256:22c9f880d753849f9d54bffb9bee34dc0a51060385212895fddd6b63751efe39[root@localhost ~]# [root@localhost ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED                  SIZEnginx2       3.4       f0b8a9a54136   Less than a second ago   133MBnginx        3.4       f0b8a9a54136   Less than a second ago   133MBnginx        latest    f0b8a9a54136   Less than a second ago   133MBcentos-tar   v1.0      22c9f880d753   5 seconds ago            209MBcentos       latest    300e315adb2f   5 months ago             209MB

容器数据卷

如果我下载了一个MySQL的镜像,并运行起来之后,大家想没想过,MySQL中的数据到底保存在了哪里? 如果保存在容器中,我的容器停止运行了,我的数据会不会丢失?更狠一点,如果我的容器被删除了,那我的数据会不会丢失? 如果保存在宿主机中,那保存在了哪里?

首先回答第一个问题,数据是保存在容器中的。那一定会有人说,如果我的MySQL容器被删掉了,岂不是相当于删库跑路了....

那我们的需求就是,容器被删掉之后。数据仍然还要保存下来,这就是咱们接下来要学习的数据卷技术。不光是容器和宿主机之间,容器和容器之间也可以进行数据共享。

使用数据卷

方式一:使用命令来挂载 -v

docker run -it -v 主机内目录:容器内目录docker run -it -v /home/ceshi:/home centos /bin/bash

查看容器详细信息,查看挂载信息

docker inspect ebb3(容器 ID)  # 容器的 ID 也可以写前几位

数据会同步,外部文件会同步到容器内,容器内的文件也会同步到外部(双向绑定)

实战-MySQL 数据同步

下载镜像

docker pull mysql:5.7

MySQL 需要设置密码

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

运行 MySQL

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7-d 后台运行-p 端口映射-v 卷挂载-e 环境配置--name 容器名字

启动成功后,在本地使用 sqlyog 来连接测试

数据卷特点

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立即影响到对应容器
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,及时容器被删除

方式二:通过 dockerfile 来使用

Dockerfile 可以认为是 Docker 镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建 Docker 镜像的构建文件。大家可以简单理解为命令脚本文件。

接下来咱们来看数据卷的第二种使用方式:

mkdir docker-test-volume    # 创建一个目录

创建 dockerfile 文件,通过这个脚本可以生成镜像:

vim dockerfile

dockerfile 文件内容,文件中的内容 ,指令全都是大写:

FROM centosVOLUME ['volume01','volume02']CMD  echo '---end---'CMD /bin/bash

执行命令

docker build -f dockerfile -t juran/centos:1.0 .

运行镜像

sudo docker run -it f3345a84603e /bin/bash

DockerFile

接下来我们详细学习一下 DockerFile,来看一张图:

通过架构图可以看出通过 DockerFile 可以直接构建镜像:

构建步骤:

  • 编写一个 dockerfile 文件
  • docker build 构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(docker hub,阿里云镜像仓库)

我们可以参考 docker 官方的镜像,来查看 dockerfile 文件,这是 centos 的镜像搜索地址:

https://hub.docker.com/_/centos

这个就是 centos 的 DockerFile:

很多官网镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像。

Dockerfile 的命令

保留字

作用

FROM

当前镜像是基于哪个镜像的 第一个指令必须是 FROM

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN

构建镜像时需要运行的指令

EXPOSE

当前容器对外暴露出的端口号

WORKDIR

指定在创建容器后,终端默认登录进来的工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 包

COPY

类似于 ADD,拷贝文件和目录到镜像中
将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

指定一个容器启动时要运行的命令
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及其参数

CMD 和 ENTRYPOINT 区别

  • CMD:指定一个容器启动时要运行的命令。Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换。
  • ENTRYPOIN:指定一个容器启动时要运行的命令。ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及其参数。

CMD 命令演示

编辑 dockerfile-cmd

FROM centosCMD ['ls','-a'] # 一定是双引号

构建 docker image

docker build -f dockerfile-cmd -t cmdtest .

运行镜像

docker run 镜像 id

添加命令

[root@localhost ~]# docker run 4219 -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: '-l': executable file not found in $PATH: unknown.cmd 的情况下 -l 替换了 CMD ['ls', '-a']命令,  -l 不是命令所以报错

ENTRYPOIN 命令演示

编辑 dockerfile-ent

FROM centosENTRYPOINT ['ls','-a'] # 一定是双引号

构建 docker image

docker build -f dockerfile-cmd -t cmdtest .

运行镜像

docker run 镜像 id

添加命令

[root@localhost ~]# docker run b452 -ltotal 32drwxr-xr-x.  17 root root 4096 May 18 07:58 .drwxr-xr-x.  17 root root 4096 May 18 07:58 ..-rwxr-xr-x.   1 root root    0 May 18 07:58 .dockerenvlrwxrwxrwx.   1 root root    7 Nov  3  2020 bin -> usr/bindrwxr-xr-x.   5 root root  340 May 18 07:58 devdrwxr-xr-x.  52 root root 4096 May 18 07:58 etcdrwxr-xr-x.   2 root root    6 Nov  3  2020 homelrwxrwxrwx.   1 root root    7 Nov  3  2020 lib -> usr/lib

docker 网络

为什么提供网络功能?

docker 允许通过外部访问容器或容器互联的方式来提供网络服务

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 (opens new window)中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。

当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

docker 是如何处理容器间网络访问的?

有一个 centos 容器还有一个 MySQL 容器,centos 容器里面的项目怎么访问 MySQL 容器,接下来咱们做一个测试。

启动一个 centos 容器

docker run -itd --name centos02 centos

查看容器 ip

docker exec -it centos02 ip addr

启动 MySQL 容器

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

查看 MySQL 容器 ip

docker inspect mysql01

两个容器之间互相 ping

docker exec -it centos02 ping 172.17.0.3(MySQL 的容器 IP)

容器和容器之间是可以互相 Ping 通的。

所有的容器不指定网络的情况下,都是 docker0 路由的,docker 会给我们的容器分配一个默认的可用 IP。

如果某一个服务请求频繁,可能会对其他服务造成影响,如果应用 1 中的 redis 请求频繁,那么会对其他的应用请求造成影响,这个时候就需要自定义网络。

自定义网络

查看所有的 docker 网络

docker network ls

网络模式

  • bridge:桥接(默认的)
  • none: 不配置网络
  • host: 和宿主机共享网络

自定义网络

docker network create --driver(也可以写-d) bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet--subnet 表示指定子网 ip--gateway 表示指定网关

也可以不指定子网 IP 和网关

docker network create -d bridge  mynet

查看 docker 网络

[root@localhost ~]# docker network lsNETWORK ID NAME DRIVER SCOPE4c92a1608dac bridge bridge local62331abc1038 host host localdfa0f1a51bf4 mynet bridge local2c8fe3989272 none null local

查看自己创建的网络

docker network inspect mynet

用自己创建的网络来启动容器

docker run -itd -P --name centos-net1 --net(也可以写--network) mynet centosdocker run -itd -P --name centos-net2 --net mynet centos

用 mynet 网络启动的容器之间也可以互相 ping 通

[root@localhost ~]# docker exec -it centos-net1 ping centos-net2

可视化工具

Portainer 是一个可视化的容器镜像的图形管理工具,利用 Portainer 可以轻松构建,管理和维护 Docker 环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

官网:https://www.portainer.io/

有需要的话,大家可以去了解一下,这里不做重点介绍。

(0)

相关推荐

  • Docker 制作Nginx镜像

    参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人 ...

  • Docker 容器技术使用指南 | 周末送资料

    目录 第一部分 Docker 容器技术基础及其应用场景介绍 1.1 Docker 的基本概念 1.2 为什么使用 Docker 1.3 Docker 体系结构简介 1.4 Docker 容器技术的应用 ...

  • 熟悉Docker操作吗?说几个常用的Docker命令吧

    写代码的渣渣鹏 昨天 1.Docker容器信息 ##查看docker容器版本docker version##查看docker容器信息docker info##查看docker容器帮助docker -- ...

  • Dockerfile创建镜像的方法以(推荐docker file这种方法)及Docker常用命令

    一.镜像制作的方法 1.本地导入导出镜像 导出命令 这里默认是把文件导出到当前运行shell的位置,后面跟的是导出路径和文件名 docker save (imageId) > (fileName ...

  • 看完这篇,Docker你就入门了

    素小暖OSC OSC开源社区 昨天 在计算机技术日新月异的今天, Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,在理解docker之前,我们先熟悉两个概念, ...

  • 两个 Docker 使用神技,99% 的人都不知道!

    最近发现两个非常好用的工具,一个是 runlike,一个是 whaler runlike:通过容器打印出容器的启动命令 whaler:通过镜像导出dockerfile 听起来是不是想说 N...B.. ...

  • Docker学习笔记之--借助Docker Compose进行多容器部署(环境:centos7)

    接下来演示借助Docker Compose进行多容器部署. 前边的章节演示尽管可以实现需求功能,但是在生产环境当中,维护起来显然很麻烦,所以下边演示借助Docker Compose功能,实现一键部署! ...

  • docker学习7-Dockerfile制作自己的镜像文件

    前言 如果你是一个python自动化测试人员,某天你在公司终于完成了一个项目的接口自动化脚本工作,在你自己常用的本机或者服务器上调试完成了脚本,稳稳地没问题. 可是晚上下班回家,你自己找了个linux ...

  • Docker定时备份MySQL数据到七牛云

    前言:我Linux服务器安装了docker,docker容器跑了springboot项目,用到了mysql数据库.所以必须准备程序,数据备份功能,万一哪天系统挂了,数据丢了,我可以随时恢复.因为没钱开 ...

  • 深入浅出讲伤寒第45篇:现代语言解读“桂枝龙骨牡蛎汤”

    后三期发文预告:麦门冬汤.奔豚汤.当归生姜羊肉汤. 发文规则:周一.周三.周五更新.点击关注@三甲医院中医袁大夫查看更多文章. 本系列文章用通俗易懂的现代科学语言解读中医方剂背后的机理及适用范围,帮助 ...

  • .NET之Docker部署详细流程

    dotNET跨平台 今天 以下文章来源于鹏祥 ,作者AZRNG 开篇语 自己从头开始走一遍docker部署.net的流程,作为一种学习总结,以及后续会写一些在该基础之上的文章. 本次示例环境:vs20 ...

  • Docker 兴衰记:关于开源的一些思考

    Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet ...

  • (40条消息) 云原生的 WebAssembly 能取代 Docker 吗?

    WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...

  • 创建用于AI和机器学习的Docker容器

    容器技术(例如Docker)极大地简化了依赖性管理和软件的可移植性.在本系列文章中,我们将探讨Docker在机器学习(ML)场景中的用法. 本系列假定您熟悉ML,一般的容器化,尤其是Docker.欢迎 ...

  • 在启用GPU的Docker容器中运行AI模型

    容器技术(例如Docker)极大地简化了依赖性管理和软件的可移植性.在本系列文章中,我们将探讨Docker在机器学习(ML)场景中的用法. 本系列假定您熟悉ML,一般的容器化,尤其是Docker.欢迎 ...

  • 教你如何使用群暉Docker安裝比emby plex更好用Jellyfin家庭影院HTPC

    大家好,俺又來了,這次給大家分享群暉Docker安裝Jellyfin了! 這個是算是俺的壓軸節目了,最近一口氣寫了好多關於群暉NAS軟體的分享,腦袋都是疼的! 關於jellyfin,最開始知道這個的時 ...

  • (40条消息) WASM能否取代Docker?

    云计算.微服务计算.无服务器计算.可扩展计算.可负担计算等等,这一切主要靠一项杰出的技术--Linux容器(LXC)来实现. Linux容器(LXC)提供了操作系统级的虚拟化沙箱.简而言之,容器允许在 ...