docker 全方位理解教程:

Docker简介以及Docker历史Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。 Docker 是在 GitHub 上开发的 Moby 开源项目的一部分。 Docker 公司,位于旧金山,是整个 Moby 开源项目的维护者。http://c.biancheng.net/view/3118.html

docker 全方位命令教程:

Docker build 命令 | 菜鸟教程Docker build 命令 Docker 命令大全 docker build 命令用于使用 Dockerfile 创建镜像。 语法 docker build [OPTIONS] PATH | URL | - OPTIONS说明: --build-arg=[] :设置镜像创建时的变量; --cpu-shares :设置 cpu 使用权重; --cpu-period :限制 CPU CFS周期; --cpu-quota :限制 ..https://www.runoob.com/docker/docker-build-command.html

docker update - [ Docker 17 中文开发手册 ] - 在线原生手册 - php中文网php中文网为您准备了Docker 17 中文开发手册,在线手册阅读,让您快速了解Docker 17 中文开发手册,本章节为Docker 17 中文开发手册的docker update部分https://www.php.cn/manual/view/36144.htmldocker update | Docker Documentationdocker update: The `docker update` command dynamically updates container configuration. You can use this command to prevent containers from consuming too many resources from their Docker host. With a single...https://docs.docker.com/engine/reference/commandline/update/

latest标签不一定表示为最新版本

docker更新容器网络 docker 更新_Docker

后台创建容器以及自定义名称以区分:

docker更新容器网络 docker 更新_运维_02

docker build 提示源失败:替换源或者修改公司代理

sudo docker build -t psweb:v1 .     注意最后的点

以下是Dockerfile原始配置

docker更新容器网络 docker 更新_docker_03

The command '/bin/sh -c apt-get update && apt-get install -y nodejs nodejs-npm' returned a non-zero code: 100
方法一:# 原始命令
 RUN apt-get install -y vim # 修改方法
 RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list;
 RUN apt-get update && apt-get install -y vim
 #或者这个都可以
 RUN apt-get update --fix-missing && apt-get install -y vim --fix-missing

 因为公司网络限制,必须使用公司代理,在Dockerfile修改

docker更新容器网络 docker 更新_docker_04

docker更新容器网络 docker 更新_docker_05

docker实现挂载的三种方式:


docker镜像升级如何保留数据和配置,以及挂载新分区:

镜像:是一个只读的Docker 容器模板,包含启动容器所需要的所有文件系统结构和内容。

简单来讲,镜像是一个特殊的文件系统,它提供了与容器运行时所需的程序,软件库、资源、配置等静态数据,镜像不包含任何动态数据,镜像内容在构建后不会被改变。 常用的镜像操作如图所示

docker更新容器网络 docker 更新_docker_06

参考题主:

 方案一:

1.先看宿主的块设备:

$ lsblk
 NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
 sda           8:0    1   7.2G  0 disk
 └─sda1        8:1    1   7.2G  0 part
 nvme0n1     259:0    0 119.2G  0 disk
 ├─nvme0n1p1 259:1    0   260M  0 part /boot
 ├─nvme0n1p2 259:2    0   128M  0 part
├─nvme0n1p3 259:3    0   118G  0 part /
 └─nvme0n1p4 259:4    0   850M  0 part2. 记下要挂载的分区的设备号(例如/的259:3)。
# 启动一个容器,没什么特殊参数
 docker run -itd --name demo alpine:latest sh #在容器内创建一个设备节点
 $ docker exec demo mknod -m 0500 /dev/nvme0n1p3 b 259 3 # 找到容器PID=1的进程PID
 $ docker top demo
 UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
 root                4189                4174                0                   23:07               pts/0               00:00:00            sh# 通过命名空间挂载磁盘
 $ docker exec demo mkdir /data
 $ sudo mount -N 4189 /dev/nvme0n1p3 /data# 访问试试
 $ docker exec demo ls -lh /data
 total 16
 -rw-r--r--    1 root     root         108 Jan 20  2019 archlinux
 lrwxrwxrwx    1 root     root           7 May 23 14:18 bin -> usr/bin
 drwxr-xr-x    2 root     root           6 Jan 20  2019 boot


...

分区都挂载进去了,干啥都行了~

方案二:

说个与 docker 无关的方法:

sshfs 可以透过 ssh 连接挂载文件系统。在容器里装一个可以通过 ssh 把宿主的目录挂进来。docker exec 新开一个 shell 搞这事就可以。这样目录里的内容存在容器外。

如果容器暴露了 ssh 端口,也可以在外面用 sshfs 把里面的目录挂出来。这样文件夹里的内容实际在容器里。容器没了就没了。

通过 ssh 不只可以挂宿主机的目录,有 ssh 连接哪里的目录都可以挂。

方案三:

docker默认没提供这个功能.

但是可以先把容器停掉, 用docker commit 创建一个新的image, 然后在运行新的image时挂载.

docker stop 容器名 docker commit 容器名 新的镜像名 docker save 导出镜像 docker load 加载镜像 docker run -v "挂载" 新的镜像名

方案四:

docker cp把运行中的容器中的文件拷贝出来,停掉,再用docker run -v挂上你想要的卷 

方案五: