Docker的部署安装
Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3.8以上

实验环境:
主机名:node1.smoke.com
操作系统:centos 7.5
内核版本:3.10.0-862.el7.x86_64
网卡1:vmnet0 172.16.100.67
网卡2:vmnet8 dhcp client
node1:
[root@node1 ~]# cd /etc/yum.repos.d/ [root@node1 yum.repos.d]# mkdir OldMirrorFile [root@node1 yum.repos.d]# mv CentOS-* OldMirrorFile/ [root@node1 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@node1 yum.repos.d]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
下载docker-ce的yum源报错如下:
[root@node1 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 已加载插件:fastestmirror adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo Could not fetch/save url https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#60 - "Peer's Certificate has expired."
由于系统时间问题导致:
[root@node1 ~]# hwclock -s [root@node1 ~]# date 2020年 02月 11日 星期二 22:07:36 CST [root@node1 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@node1 ~]# yum makecache fast [root@node1 ~]# yum -y install docker-ce [root@node1 ~]# systemctl enable docker
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo # 将[docker-ce-test]下方的enabled=0修改为enabled=1 #
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
#安装校验
root@iZbp12adskpuoxodbkqzjfZ:$ docker version Client: Version: 17.03.0-ce API version: 1.26 Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 07:52:04 2017 OS/Arch: linux/amd64 Server: Version: 17.03.0-ce API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 07:52:04 2017 OS/Arch: linux/amd64 Experimental: false
注册阿里云账号密码https://cr.console.aliyun.com,登录后点击镜像加速器,复制加速器地址(https://bhzjdbej.mirror.aliyuncs.com)

[root@node1 ~]# mkdir -p /etc/docker
[root@node1 ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://bhzjdbej.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://bhzjdbej.mirror.aliyuncs.com"]
}
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker
[root@node1 ~]# systemctl | grep docker #查看docker进程状态
[root@node1 ~]# docker info
关闭默认的frewalld防火墙,安装iptables-services
[root@node1 ~]# systemctl disable firewalld [root@node1 ~]# systemctl stop firewalld [root@node1 ~]# yum -y install iptables-services [root@node1 ~]# systemctl enable iptables [root@node1 ~]# systemctl start iptables
设置内核参数
[root@node1 ~]# vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 [root@node1 ~]# sysctl -p net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1
查看版本及网桥接口
[root@node1 ~]# docker version
[root@node1 ~]# ip addr show docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:1c:bd:fc:1e brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Docker配置文件与日志
Centos6.x版本:
Docker配置文件: /etc/sysconfig/docker
OPTIONS 用来控制Docker Daemon进程参数
-H 表示Docker Daemon绑定的地址,-H=unix:///var/run/docker.sock -H=tcp://0.0.0.0:2375
--registry-mirror表示Docker Registry的镜像地址--registry-mirror=http://4bc5abeb.m.daocloud.io
--insecure-registry表示(本地)私有Docker Registry的地址, --insecure-registry ${pivateRegistyHost}:5000
--selinux-enabled是否开启SELinux,默认开启 --selinux-enabled=true
--bip 表示网桥docker0使用指定CIDR网络地址, --bip=172.17.42.1
-b 表示采用已经创建好的网桥, -b=xxx
重要参数解释:
OPTIONS=-H=unix:///var/run/docker.sock -H=tcp://0.0.0.0:2375 --registrymirror=http://4bc5abeb.m.daocloud.io --selinux-enabled=true
下面是代理的设置
http_proxy=xxxxx:8080
https_proxy=xxxxxx:8080
Centos7.x版本:
Docker配置文件:vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/docker daemon -H fd:// -H=unix:///var/run/docker.sock -H=tcp://0.0.0.0:2375 --registry
mirror=http://4bc5abeb.m.daocloud.io --selinux-enabled=true
[Service]
Environment="HTTP_PROXY=http://xxxxcom:8080" #代理设置
Environment="HTTPS_PROXY=http://xxxcom:8080"
Type=notify
ExecStart=/usr/bin/docker daemo
Docker基础命令
[root@node1 ~]# tail -f /var/log/messages | grep docker #Dokcer的日志文件写到/var/log/message里 [root@node1 ~]# docker search java
可以通过官网www.docker.com到docker-hub里面找所要安装的镜像

docker仓库https://hub.docker.com,注册后登陆,我的账号smoke584520,密码smoke@5201314;

[root@node1 ~]# docker pull java
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
java latest d23bdf5b1b1b 3 years ago 643MB
[root@node1 ~]# docker run -it java java -version #docker run里面的命令结束了,container就结束了
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
[root@node1 ~]# docker run -it java uname
Linux
[root@node1 ~]# docker run java ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@node1 ~]# docker run java env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=bc60c83f1de2
LANG=C.UTF-8
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JAVA_VERSION=8u111
JAVA_DEBIAN_VERSION=8u111-b14-2~bpo8+1
CA_CERTIFICATES_JAVA_VERSION=20140324
HOME=/root
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
决定容器的运行方式,前台执行还是后台执行
docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。
docker exec来进入到到该容器中,或者attach重新连接容器的会话
进行交互式操作(例如Shell脚本),那我们必须使用-i -t参数同容器进行数据交互
docker run时没有指定--name,那么deamon会自动生成一个随机字符串UUID
Docker时有自动化的需求,你可以将containerID输出到指定的文件中(PIDfile): --cidfile=""
Docker的容器是没有特权的,例如不能在容器中再启动一个容器。这是因为默认情况下容器是不能访问任何其它设备的。但是通过"privileged",容器就拥有了访问任何其它设备的权限。
docker create/start/stop/pause/unpause 容器生命周期相关指令
[root@node1 ~]# docker create -it --name=myjava java java version [root@node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e32d7b7c76dc java "java version" 18 seconds ago Created myjava bc60c83f1de2 java "env" 14 minutes ago Exited (0) 14 minutes ago keen_herschel a88de630027f java "ip addr show" 14 minutes ago Exited (0) 14 minutes ago lucid_tesla 9141607559ae java "uname" 15 minutes ago Exited (0) 15 minutes ago adoring_heisenberg 44e6e045e891 java "java -version" 15 minutes ago Exited (0) 15 minutes ago quirky_jennings [root@node1 ~]# docker start myjava [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@node1 ~]# docker create --name mysqlsrv1 -e MYSQL_ROOT_PASSWORD=smoke520 -p 3306:3306 mysql [root@node1 ~]# docker start mysqlsrv1 [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b5d8dcc64e2b mysql "docker-entrypoint.s…" 22 seconds ago Up 13 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlsrv1 [root@node1 ~]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1024/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1444/master tcp6 0 0 :::3306 :::* LISTEN 37559/docker-proxy tcp6 0 0 :::22 :::* LISTEN 1024/sshd tcp6 0 0 ::1:25 :::* LISTEN 1444/master [root@node1 ~]# docker exec mysqlsrv1 env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=b5d8dcc64e2b MYSQL_ROOT_PASSWORD=smoke520 GOSU_VERSION=1.7 MYSQL_MAJOR=8.0 MYSQL_VERSION=8.0.19-1debian9 HOME=/root
修改mysql权限
[root@node1 ~]# docker exec -it mysqlsrv1 bash root@b5d8dcc64e2b:/# mysql -uroot -psmoke520 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'smoke520'; Query OK, 0 rows affected (0.01 sec) mysql> \q Bye
通过windows机器连接
C:\Users\Smoke>mysql -uroot -psmoke520 -h172.16.100.67 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
node1:
[root@node1 ~]# docker ps #临时容器可以运行时使用run -rm,运行完就删掉 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11f068716ba1 mysql "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:3306->3306/tcp,33060/tcp mysqlsrv1
浙公网安备 33010602011771号