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