docker那点事

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中文官方文档

http://docs.docker-cn.com/

8.走进Docker系列

https://segmentfault.com/a/1190000009309276

9.使用Dockerfile构建Docker镜像

https://www.jianshu.com/p/cbce69c7a52f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值