Docker 持久化数据有两种方式:html
数据卷相关的命令:python
docker volume create <volume name> # 新建数据卷 docker volume ls # 列出全部数据卷 docker volume inspect <volume name> # 查看数据卷信息 docker volume rm <volume name> # 删除数据卷 docker volume prune # 清除全部未挂载的数据卷
数据卷/文件夹的挂载命令:linux
# 1. 挂载数据卷 docker run -d -P \ --name web \ # -v my-vol:/wepapp \ --mount source=my-vol,target=/webapp \ training/webapp \ python app.py # 2. 挂载宿主机的文件夹 docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp:ro \ --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \ training/webapp \ python app.py # P.S. 之前是使用 -v 参数,如今推荐使用 --mount
使用端口映射 -p <宿主机端口>:<容器端口>
(该参数可重复屡次使用),或者 -P
将容器 EXPOSE
出来的端口随机映射到宿主机。git
比较方便的方案,是将容器加入自定义的 Docker 网络以实现多容器互联。github
docker network create --driver=bridge <net name> # 新建自定义网络,使用 bridge 模式
docker run --network=<net name> --name <container name> ...
将容器添加到该自定义网络而后在其中一个容器中 ping <container name>
,该名称会直接被解析到对应的容器 ip。这样,容器之间就能以容器名称为 hostname 互联。web
docker container inspect
可获知容器在 docker0 上的 ip 地址,容器之间能够经过该 ip 通讯。
若是容器较多,推荐使用 docker-compose 进行编排。docker
从 Docker 对这种链接方式的支持来看,显然是很不推荐用户这么干的。shell
可是对我的用户而言,从容器访问宿主机,我以为仍是个挺常见的需求。安全
可用方法以下:网络
--network=host
,容器与宿主机共用网络
ip addr show docker0
查看宿主机在网桥 docker0
上的 ip 地址(linux 下通常为 172.17.0.1
),容器可经过该 ip 访问宿主机。
docker0
上可能具备不一样的 ip,须要运行时手动配置。host.docker.internal
访问宿主机了。一个系统上的 docker 容器,默认状况下是没法修改系统的公共内核参数的。这是一种隔离机制。
若是某个容器抽风把系统参数改得一团糟,那全部容器都会崩溃,没有人会但愿碰到这种状况。
可是有的时候,咱们确实须要在容器内修改整个系统的某些参数。好比在测试系统的时候,咱们系统直接修改整个系统的时间,而后查看咱们的应用可否应对这种问题。
为了知足这种需求,Docker 提供了一组参数用来给容器设置额外的权限。
Docker 容器的隔离是基于 Linux 的 Capability 机制实现的, Linux 的Capability 机制容许你将超级用户相关的高级权限划分红为不一样的小单元. 目前 Docker 容器默认只用到了如下的 Capability:
CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD, NET_RAW, SETGID, SETUID, SETFCAP, SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE
使用 --cap-add, --cap-drop 能够添加或禁用特定的权限。
而要修改系统时间须要有 SYS_TIME 权限,因此咱们在运行容器时须要添加参数 --cap-add SYS_TIME
。
而后在容器里运行 date --set "time-string"
,就能修改掉整个系统的时间。
P.S.
--privileged
参数也能够达到开放权限的做用, 与--cap-add
的区别就是,--privileged
是将全部权限给容器,这至关危险!
用于编排多个容器,管理容器集群之间的协做关系。
国内安装镜像:docker: install-compose
docker-compose up
:
-d
模式(detached,分离模式)下运行。与默认行为的差异在与,命令结束后,容器组中的容器仍然会继续运行。docker-compose start
: 启动终止的容器组。docker-compose 大部分命令都和 docker 彻底相似。只是它是集群版本。
docker-compose.yml
模板