【Docker学习之二】Docker部署安装
环境
docker-ce-19.03.1-3.el7.x86_64
一、Docker的部署安装
Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3.8以上。
(1)检查版本
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
使用命令查看内核版本:uname -r
[root@node105 ~]# uname -r 3.10.0-957.el7.x86_64
(2)安装辅助工具:
[root@node105 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:管理repository及扩展包的工具 (主要是针对repository);
device-mapper-persistent-data:Device Mapper支持Linux上的许多高级卷管理技术;
lvm2:逻辑卷管理工具;
(3)添加软件源信息,这里使用Docker CE版本。
从2017年3月开始docker在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
[root@node105 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
[root@node105 ~]# yum makecache fast
(4)移除旧的版本
[root@node105 ~]# 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
[root@node105 ~]# yum -y install docker-ce
另:使用脚本安装 Docker
(5.1)确保 yum 包更新到最新
[root@node105 ~]# yum update
(5.2)获取Docker安装脚本
[root@node105 ~]# curl -fsSL https://get.docker.com -o get-docker.sh
(5.3)执行Docker安装脚本
[root@node105 ~]# sh get-docker.sh
执行这个脚本会添加 docker.repo 源并安装 Docker。
(6)启动
[root@node105 ~]# systemctl start docker
或者
#服务方式启动 [root@node105 log]# service docker start Redirecting to /bin/systemctl start docker.service #设置开机启动 [root@node105 log]# chkconfig docker on Note: Forwarding request to 'systemctl enable docker.service'. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@node105 log]#
(7)测试运行 hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行.
[root@node105 docker]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
(8)卸载Docker CE
[root@node105 ~]# yum remove docker-ce 或 [root@node105 ~]# rm -rf /var/lib/docker
(9)镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。
比如网易的镜像地址:http://hub-mirror.c.163.com
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
[root@node105 docker]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors": ["http://hub-mirror.c.163.com"] > } > EOF { "registry-mirrors": ["http://hub-mirror.c.163.com"] } [root@node105 docker]# systemctl daemon-reload [root@node105 docker]# systemctl restart docker
二、Docker配置文件与日志
1、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": "" }
2、日志文件:
/var/log/message
三、Docker基础命令讲解
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:从归档文件中创建镜像。