CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6bd0496da64f nginx “/bin/bash” 20 seconds ago Up 18 seconds 80/tcp high_shirley

使用docker exec命令进入一个已经在运行的容器
docker exec -it 6bd0496da64f /bin/bash
通常有下面几种方式进入Docker的容器,推荐使用exec,使用attach一直进入失败。

使用docker attach
使用SSH 为什么不需要在 Docker 容器中运行 sshd
使用nsenter进入Docker容器,nsenter官方仓库
使用docker exec,在1.3.*之后提供了一个新的命令exec用于进入容器
文件拷贝
从主机复制到容器 sudo docker cp host_path containerID:container_path
从容器复制到主机 sudo docker cp containerID:container_path host_path

Docker私有仓库搭建
通过官方提供的私有仓库镜像registry来搭建私有仓库。通过 humpback 快速搭建轻量级的Docker容器云管理平台。关于仓库配置说明请参见configuration.md

⚠️ 注意:也可以通过部署管理工具 Harbor 来部署 registry

除了 Harbor 还有 humpback 和 rancher

registry
docker pull registry:2.6.2
创建容器并运行,创建成功之后,可访问 http://192.168.99.100:7000/v2/,来检查仓库是否正常运行,当返回 {} 时,表示部署成功。

docker run -d \ -p 5000:5000 \ –restart=always \ –name registry \ registry:2

自定义存储位置

docker run -d \ -p 5000:5000 \ –restart=always \ –name registry \ -v $HOME/_docker/registry:/var/lib/registry \ registry:2
docker run -d -p 5000:5000 –restart=always –name registry \ -v pwd/config.yml:/etc/docker/registry/config.yml \ registry:2
推送镜像到私有仓库

从官方仓库拉取一个镜像

docker pull nginx:1.13

为镜像 nginx:1.13 创建一个新标签 192.168.31.69:7000/test-nginx:1.13

docker tag nginx:latest 192.168.31.69:5000/test-nginx:1.13

推送到私有仓库中

docker push 192.168.31.69:5000/test-nginx:1.13

The push refers to a repository [192.168.99.100:7000/test-nginx]

Get https://192.168.99.100:7000/v1/_ping: http: server gave HTTP response to HTTPS client

在推送到的时候报错误,默认是使用https提交,这个搭建的默认使用的是 http,解决方法两个:

创建一个https映射
将仓库地址加入到不安全的仓库列表中
我们使用第二种方法,加入到不安全的仓库列表中,修改docker配置文件vi /etc/docker/daemon.json 添加 insecure-registries配置信息,如果 daemon.json 文件不存在可以创建,关键配置项,将仓库将入到不安全的仓库列表中。

{
“insecure-registries”:[
“192.168.31.69:5000”
]
}
如果是 macOS 可以通过 docker 客户端,Preferences => Advanced => 添加配置 => Apply & Restart,重启docker就可以了。

重启服务 service docker restart,默认情况下 push 是会报如下错误的:

docker push 192.168.99.100:7000/test-nginx:1.13

The push refers to a repository [192.168.99.100:7000/test-nginx]

a1a53f8d99b5: Retrying in 1 second

received unexpected HTTP status: 500 Internal Server Error

上面错误是 SELinux 强制访问控制安全系统,阻止导致的错误,通过下面方法禁用 SELinux 之后就可以 push 了。

setenforce 0
getenforce

Permissive

停止本地 registry

docker container stop registry

要删除容器,请使用 docker container rm

docker container stop registry && docker container rm -v registry

自定义存储位置

Harbor
部署 registry 管理工具 Harbor

使用Docker实战
⚠文件挂载注意:docker 禁止用主机上不存在的文件挂载到 container 中已经存在的文件

-d, –detach=false # 指定容器运行于前台还是后台,默认为false
-i, –interactive=false # 打开STDIN,用于控制台交互
-t, –tty=false # 分配tty设备,该可以支持终端登录,默认为false
-u, –user=”” # 指定容器的用户
-a, –attach=[] # 登录容器(必须是以docker run -d启动的容器)
-w, –workdir=”” # 指定容器的工作目录
-c, –cpu-shares=0 # 设置容器CPU权重,在CPU共享场景使用
-e, –env=[] # 指定环境变量,容器中可以使用该环境变量
-m, –memory=”” # 指定容器的内存上限
-P, –publish-all=false # 指定容器暴露的端口
-p, –publish=[] # 指定容器暴露的端口
-h, –hostname=”” # 指定容器的主机名
-v, –volume=[] # 给容器挂载存储卷,挂载到容器的某个目录
–volumes-from=[] # 给容器挂载其他容器上的卷,挂载到容器的某个目录
–cap-add=[] # 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cap-drop=[] # 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cidfile=”” # 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
–cpuset=”” # 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
device=[] # 添加主机设备给容器,相当于设备直通
–dns=[] # 指定容器的dns服务器
–dns-search=[] # 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
–entrypoint=”” # 覆盖image的入口点
–env-file=[] # 指定环境变量文件,文件格式为每行一个环境变量
–expose=[] # 指定容器暴露的端口,即修改镜像的暴露端口
–link=[] # 指定容器间的关联,使用其他容器的IP、env等信息
–lxc-conf=[] # 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
–name=”” # 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
–net=”bridge” # 容器网络设置:

    内容分页 1 2 3 4 5
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。