服务器部署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:从归档文件中创建镜像。