docker踩坑之旅

服务器部署docker

背景

想在服务器上搭一个测试平台,刚好白嫖到一个免费的服务器,不搞一下对不起这活动,刚好这个和我们平时工作也是比较贴切,给想练手的小伙伴踩坑

环境信息

在这里插入图片描述
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

开工安装

如果小伙伴环境以及安装好了yum,请直接跳到第4步
1.安装辅助工具:

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-utils:管理repository及扩展包的工具 (主要是针对repository);

device-mapper-persistent-data:Device Mapper支持Linux上的许多高级卷管理技术;
lvm2:逻辑卷管理工具;
2.添加软件源信息,这里使用Docker CE版本。
从2017年3月开始docker在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.更新 yum 缓存:

yum makecache fast

4.移除旧的版本

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

5.安装docker-ce

yum -y install docker-ce

(5.1)确保 yum 包更新到最新

yum update

(5.2)获取Docker安装脚本

curl -fsSL https://get.docker.com -o get-docker.sh

这里有个坑,有小伙伴可能会遇到报错curl: (35) TCP connection reset by peer,这时候多执行几下就可以了
(5.3)执行Docker安装脚本

sh get-docker.sh

执行这个脚本会添加 docker.repo 源并安装 Docker。

6.启动
以服务当时启动

systemctl start docker

设置开启启动

chkconfig docker on

7.测试运行 hello-world

docker run hello-world

结果报错
在这里插入图片描述
一顿分析就是网络问题,然后是网络问题呗,我连的上百度,但是这里下载docker失败,就是镜像源问题,试了许多办法,终于找到这个有效的办法
在这里插入图片描述
如何遇到这个报错就起一下服务
在这里插入图片描述
systemctl start docker

我这里是用了阿里云,小伙伴可以根据自己喜好来改

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://cohqwtqt.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

效果图
在这里插入图片描述

Docker配置文件与日志

OPTIONS 参数

docker V1.11之前配置文件位于/etc/sysconfig/docker,之后以systemd方式管理docker,默认没有创建配置文件,需要自己创建/etc/systemd/system/docker.service.d/docker.conf

用过命令行参数,指定配置,也可以将这些命令行参数放到docker.conf里的ExecStart后面,还可以使用配置文件daemon.json

1.命令行

sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

2.docker.conf

[Service]
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY

3.daemon.json

{
    "api-cors-header": "", 
    "authorization-plugins": [ ], 
    "bip": "", 
    "bridge": "", 
    "cgroup-parent": "", 
    "cluster-store": "", 
    "cluster-store-opts": { }, 
    "cluster-advertise": "", 
    "debug": true,            # 启用debug的模式,启用后,可以看到很多的启动信息,默认false
    "default-gateway": "", 
    "default-gateway-v6": "", 
    "default-runtime": "runc", 
    "default-ulimits": { }, 
    "disable-legacy-registry": false, 
    "dns": ["192.168.1.1"],  # 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看
    "dns-opts": [ ],         # 容器 /etc/resolv.conf 文件,其他设置
    "dns-search": [ ],       # 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器
    "exec-opts": [ ], 
    "exec-root": "", 
    "fixed-cidr": "", 
    "fixed-cidr-v6": "", 
    "graph": "/var/lib/docker",      # 已废弃,使用data-root代替,这个主要看docker的版本
    "data-root": "/var/lib/docker",  # Docker运行时使用的根路径,默认/var/lib/docker
    "group": "",                     # Unix套接字的属组,仅指/var/run/docker.sock
    "hosts": [ ],                    # 设置容器hosts
    "icc": false, 
    "insecure-registries": [ ],      # 配置docker的私库地址
    "ip": "0.0.0.0", 
    "iptables": false, 
    "ipv6": false, 
    "ip-forward": false,  # 默认true, 启用 net.ipv4.ip_forward ,进入容器后使用 sysctl -a | grepnet.ipv4.ip_forward 查看
    "ip-masq": false, 
    "labels": ["nodeName=node-121"],  # docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
    "live-restore": true, 
    "log-driver": "", 
    "log-level": "", 
    "log-opts": { }, 
    "max-concurrent-downloads": 3, 
    "max-concurrent-uploads": 5, 
    "mtu": 0, 
    "oom-score-adjust": -500, 
    "pidfile": "",     # Docker守护进程的PID文件
    "raw-logs": false, 
    "registry-mirrors": ["xxxx"],  # 镜像加速的地址,增加后在 docker info中可查看
    "runtimes": {
        "runc": {
            "path": "runc"
        }, 
        "custom": {
            "path": "/usr/local/bin/my-runc-replacement", 
            "runtimeArgs": [
                "--debug"
            ]
        }
    }, 
    "selinux-enabled": false,  # 默认 false,启用selinux支持
    "storage-driver": "", 
    "storage-opts": [ ], 
    "swarm-default-advertise-addr": "", 
    "tls": true,       # 默认false, 启动TLS认证开关
    "tlscacert": "",   # 默认~/.docker/ca.pem,通过CA认证过的的certificate文件路径
    "tlscert": "",     # 默认~/.docker/cert.pem,TLS的certificate文件路径
    "tlskey": "",      # 默认~/.docker/key.pem,TLS的key文件路径
    "tlsverify": true, # 默认false,使用TLS并做后台进程与客户端通讯的验证
    "userland-proxy": false, 
    "userns-remap": ""

日志文件:

/var/log/message

常用命令

1、info、version
docker info : 显示 Docker 系统信息,包括镜像和容器数。
docker version :显示 Docker 版本信息

2、容器生命周期管理
run:创建一个新的容器并运行一个命令
start/stop/restart:启动/停止/重启容器
kill:杀掉一个运行中的容器
rm:删除容器。
pause/unpause:暂停/恢复容器中所有的进程。
create:创建一个新的容器但不启动它;
exec:在运行的容器中执行命令

3、容器操作
ps:列出容器
inspect:获取容器/镜像的元数据
top:查看容器中运行的进程信息,支持ps命令参数。
attach:连接到正在运行中的容器
events:从服务器获取实时事件
logs:获取容器的日志
wait:阻塞运行直到容器停止,然后打印出它的退出代码。
export:将文件系统作为一个tar归档文件导出到STDOUT。
port:列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。

4、容器rootfs命令
commit:从容器创建一个新的镜像。
cp:用于容器与主机之间的数据拷贝。
diff:检查容器里文件结构的更改。

5、镜像仓库
login/logout:登陆到/出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
pull:从镜像仓库中拉取或者更新指定镜像;
push:将本地的镜像上传到镜像仓库,要先登陆到镜像仓库;
search:从Docker Hub查找镜像;

6、本地镜像管理
images:列出本地镜像。
rmi:删除本地一个或多少镜像。
tag:标记本地镜像,将其归入某一仓库
build:命令用于使用 Dockerfile 创建镜像
history:查看指定镜像的创建历史。
save:将指定镜像保存成 tar 归档文件。
load:导入使用 docker save 命令导出的镜像。
import:从归档文件中创建镜像。

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值