docker 容器有两种运行模式
前台运行
后台运行 / 守护式运行
使用 docker run -d 运行容器以进入后台运行
后台运行的容器容器启动后脱离(不再监听)启动容器时使用的终端命令行
后台运行的容器只能通过网络 / 共享卷组进行 I/O 数据交互
可以使用下面指令重新挂载容器
docker attach
容器无法配合 --rm 参数,在容器退出并关闭时自动清除所有该容器的信息
后台运行容器的自动退出
原因
容器需要满足下面条件之一才能后台运行
解决
后台启动一直挂起性质的容器,比如 redis
后台启动的同时给一个永远执行不完的指令,比如
docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null"
如上图所示
p1-4 是 4 个 docker 容器的端口
P1-4 是物理机操作系统的端口
若 p1 端口(比如 8080),是容器中某 App / 服务(比如 Tomcat) 使用的端口
容器启动时用户实际上希望访问此端口以使用对应的 App / 服务
但是,外部访问只能直接访问物理机操作系统的端口 P1-4,
因此,需要将 容器内的 p1 端口 映射到 物理机的 P1 端口,相当于在物理机端口和容器内部端口之间架桥
端口映射后,物理机的 P1 端口 代理了 容器内的 p1 端口,访问物理机端口相当于访问容器内端口
docker 提供了两种退出容器的方式
docker 阿里云仓库快速指令
下面指令可以从具体仓库的基本信息中获取,如下图
登录阿里云仓库
docker login --username=aliyun16 registry.cn-hangzhou.aliyuncs.com
从Registry中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/fc-learning/ubuntu:[镜像版本号]
将镜像推送到Registry
推送前使用 tag 指令打标签,标签中指定 命名空间、库、版本
docker login --username=aliyun16 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/fc-learning/ubuntu:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/fc-learning/ubuntu:[镜像版本号]
拉取 docker 私有仓库镜像
docker pull registry
打开私有仓库 push 的 http 支持
docker 私有仓库默认不支持 http 的推送方式,如果有需要可以通过配置文件修改
vim /etc/docker/daemon.json
添加 insecure-registries 项,注意 json 格式
{
"registry-mirrors": ["https://2mkskfi4.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.3.11:5000"]
}
重启 docker 服务
systemctl restart docker
通过镜像部署私有仓库
docker run -d -p 主机端口:容器端口 -v 主机路径:容器路径 --privileged=true 私有仓库名
私有仓库的 http 请求
查看仓库
http://192.168.3.11:5000/v2/_catalog
数据卷说明
数据卷的挂载
容器启动时,通过下面属性挂载数据卷
-v 主机路径:容器路径[:数据卷读写模式] [--privileged=true]
示例
-v /docker_registry:/tmp/registry:rw --privileged=true
数据卷的读写模式
数据卷有两种读写模式
数据卷的继承
容器之间可以通过如下参数继承数据卷
--volumes-from 继承的容器
继承数据卷后
数据卷的权限
CentOs 7 开始,安全模块会默认禁止不安全的操作,包括挂载数据卷
被安全模块拦截时,会出现提示
cannot open directory .: Permission denied
可以使用下面参数打开
--privileged=true
登录后界面如图
镜像仓库的认证
docker 的镜像仓库有 4 种认证(上图的三种和无认证)
进入仓库后可见下图,红框处是 TAG 清单和最新版本拉取指令的快速复制
可以在每个 TAG 上找到快速拉取指令
docker 指令嵌套
docker 的指令可以嵌套引用,引用时使用 ${} 包裹,如
docker rmi -f ${docker images -qa}