赞
踩
1.docker从宿主主机中上传文件到容器中
docker cp /home/root/swagger/swagger.json flamboyant_khorana:/usr/share/nginx/html/
/home/root/swagger/swagger.json 宿主主机的路径
flamboyant_khorana:/usr/share/nginx/html/ flamboyant_khorana容器的文件路径
2.docker进入容器中
docker exec -it flamboyant_khorana /bin/sh
3.一个宿主机端口映射到容器端口,iptables规则。
docker自动生成的规则
自己生成的规则
iptables -A FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DOCKER-ISOLATION
iptables -A FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DOCKER
iptables -A DOCKER -p tcp -s 0.0.0.0/0 -d 172.17.0.2 --dport 8080 -j ACCEPT
iptables -A DOCKER-ISOLATION -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 -j RETURN
做完以上规则添加,就可以通过宿主机端口访问容器端口了。
以下形式也是可以映射的
iptables -D DOCKER-ISOLATION -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 -j RETURN
iptables -D FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DOCKER-ISOLATION
以下形式也可以映射
iptables -D DOCKER -p tcp -s 0.0.0.0/0 -d 172.17.0.2 --dport 8080 -j ACCEPT
iptables -D FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DOCKER
4.docker守护进程启动,监听本机端口,可远程调用
nohup dockerd --registry-mirror=https://registry.docker-cn.com -H unix:///var/run/docker.sock -Htcp://0.0.0.0:5678 2>&1 &
5.手动把开宿主主机的端口映射到某个容器上的端口
a.配置转发
iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:8080
b.配置filter规则接收上面的数据转发
iptables -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 8080 -j ACCEPT
c.IP伪装(不写也是可以进行映射的)
iptables -t nat -A POSTROUTING -p tcp -s 172.17.0.2 -d 172.17.0.2 --dport 8080 -j MASQUERADE
参考文章https://blog.csdn.net/ztguang/article/details/51404112
6.docker修改可以访问http仓库的两种方式
[root@localhost ~]# cat /etc/docker/daemon.json
{ "insecure-registries":["192.168.126.1:8080"] }
有时候去修改配置之后,docker宿主进程无缘无故就启不来了,如下
检查下/etc/docker/daemon.json /lib/systemd/system/docker.service 和 /etc/sysconfig/docker 是否都配置了insecure-registries导致冲突。只保留一个配置文件中的配置即可。(推荐/etc/docker/daemon.json 中保留配置)
7.docker hub私有仓库
registry.hub.docker.com
8.登录成功后,密码以username:password进行Base64编码存放在/root/.docker/config.json中。
9.docker login登录远程仓库调用远程仓库的接口,及相关流程(以 registry.hub.docker.com 仓库为例)
Nov 1 09:44:09 172.18.0.1 proxy[1343]: 192.168.126.135 - "GET /v2/ HTTP/1.1" 401 87 "-" "docker/17.06.0-ce go/go1.8.3 git-commit/02c1d87 kernel/3.10.0-693.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/17.06.0-ce \x5C(linux\x5C))" 0.004 0.004 .
Nov 1 09:44:09 172.18.0.1 proxy[1343]: 192.168.126.135 - "GET /service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry HTTP/1.1" 200 894 "-" "docker/17.06.0-ce go/go1.8.3 git-commit/02c1d87 kernel/3.10.0-693.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/17.06.0-ce \x5C(linux\x5C))" 0.060 0.060 .
Nov 1 09:44:09 172.18.0.1 proxy[1343]: 192.168.126.135 - "GET /v2/ HTTP/1.1" 200 2 "-" "docker/17.06.0-ce go/go1.8.3 git-commit/02c1d87 kernel/3.10.0-693.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/17.06.0-ce \x5C(linux\x5C))" 0.005 0.005 .
首先会发送GET请求到 https://registry.hub.docker.com/v2/ 接口,接口会判断是否存在 Authorization 请求头,不存在则响应无权限401
然后docker client 根据响应的请求头中 realm地址去校验用户名和密码是否合法
请求头为 "Authorization=Basic base64(username:password)",校验成功则返回token。否则响应401
接着docker client 再带上请求头"Authorization=Bearer ${token}"访问 https://registry.hub.docker.com/v2/ 接口,接口校验token合法性,不合法响应401.合法完成登录,docker client 显示Login success.
参考https://www.cnblogs.com/kingfsen/p/9845801.html
10.基于Harbor进行接口调用时,比如调用/v2/<name>/blobs/uploads/ 接口初始化上传任务
提示所带token的权限不够,需要申请scope权限的tomcat
scope需要进行URL编码,在线工具http://tool.chinaz.com/tools/urlencode.aspx
再把取得的token放入接口请求头请求接口,就可以获取到上传地址了。
11.如何在Linux上安装指定版本的Docker
(1)卸载旧版本的docker
查看yum安装的软件 yum list docker
yum remove [对应的软件] 即可删除
(2)安装指定版本的docker
参考文章
安装指定版本的docker
https://www.cnblogs.com/harlanzhang/p/9965534.html
docker 启动报错 driver not supported
http://blog.51cto.com/michaelkang/2287219
13.docker中的本地镜像默认存放在/var/lib/docker路径下,也可以通过docker daemon -g 参数在启动Daemon时指定
14.搜索某个仓库下的镜像
docker search registry.hub.docker.com/mochencheng
15Dockerfile
16.docker搭建私有仓库、自签发证书、登录认证
https://segmentfault.com/a/1190000012175537
17.docker ubuntu更换版本
sudo apt-get purge docker-ce
sudo rm -rf /var/lib/docker
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce=17.09.1~ce-0~ubuntu
18.自签名证书放置位置
19.镜像导入
docker save b11a9a14e4eb > ubuntu12.04.tar 的镜像导入
20.制作系统级基础镜像
sudo debootstrap --include python,python-setuptools,apt,ssh,vim --verbose --arch=amd64 xenial /ubuntu16.04-image http://mirrors.aliyun.com/ubuntu
sudo tar -c .|sudo docker import - ubuntu-base:16.04
21.修改docker默认镜像和容器的存储位置
https://www.cnblogs.com/bigberg/p/8057807.html
或者通过软连接方式
mkdir -p /data/docker/data
cp -r /var/lib/docker/. /data/docker/data
systemctl stop docker
cd /var/lib/
mv docker docker-bak
ln -s /data/docker/data /var/lib/docker
systemctl start docker
22.docker inspect containerName 看到的时间为统一时间(UTC)可以转化为北京时间(GST)
linux UTC时间转化为时间戳
date +%s -d"2019-08-12T12:14:14Z"
linux 当前UTC时间
date -u "+%Y-%m-%dT%H:%M:%SZ"
参考文章
Ubuntu16.04安装docker-ce(阿里源)
https://blog.csdn.net/u013531940/article/details/79705502
参考文章
1.docker运维(2):常用docker命令
https://blog.csdn.net/yjk13703623757/article/details/53203701
2.如何进入、退出docker的container
https://blog.csdn.net/dongdong9223/article/details/52998375
3.分析Docker images 的工具
https://github.com/justone/dockviz
4.提升镜像拉取速度
https://blog.csdn.net/cacacai/article/details/80461733
5.容器如何访问外部世界
https://www.cnblogs.com/CloudMan6/p/7107407.html?utm_source=itdadao&utm_medium=referral
6.windows上安装docker
https://www.cnblogs.com/5bug/p/8506085.html
7.Docker中文官方文档
8.走进Docker系列
https://segmentfault.com/a/1190000009309276
9.使用Dockerfile构建Docker镜像
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。