1、通过 RPM 安装 docker 17.03.0 版本并且配置 docker 阿里加速
1.1官网下载dockers17.03.0rpm包
RPM下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
1.2 centos7上通过rpm包安装docker
1.关闭防火墙
[root@centos7 ~]# systemctl stop firewalld
[root@centos7 ~]# systemctl disable firewalld
2.关闭selinux
[root@centos7 ~]# getenforce
Disabled
3.安装并启动iptables
因为:docker会利用防火墙策略配置一些功能
#安装防火墙
[root@centos7 ~]# yum install -y iptables
#清空防火墙规则
[root@centos7 ~]# iptables -F
[root@centos7 ~]# iptables-save > /etc/iptables.rules
4.更新软件包
[root@centos7 ~]# yum update -y
把rpm包上传至服务器
5.进行安装docker
#创建docker文件夹
[root@centos7 ~]# mkdir /docker
[root@centos7 ~]# mv /root/d* /docker
[root@centos7 ~]# ll /docker/
total 19096
-rw-r--r-- 1 root root 19521288 Nov 15 12:47 docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 29108 Nov 15 12:47 docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
#yum对rpm进行安装
[root@centos7 docker]# yum install -y *
#启动docker
[root@centos7 docker]# systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@centos7 docker]# docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:10:07 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 08:10:07 2017
OS/Arch: linux/amd64
Experimental: false
1.3 docker进行加速配置
因为docker镜像官方源在国外,所以下载镜像比较慢,所以进行加速,利用国内源,此处利用阿里源。
生成配置文件
[root@centos7 docker]# mkdir /etc/docker
[root@centos7 docker]# tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://123456.mirror.aliyuncs.com"] #写入上面自己的阿里云加速地址
}
EOF
重新加载配置,重启docker服务
[root@centos7 docker]# systemctl daemon-reload
[root@centos7 docker]# systemctl restart docker
#验证加速
[root@centos7 docker]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.0-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 977c511eda0925a723debdc94d09459af49d082a
runc version: a01dafd48bc1c7cc12bdb01206f9fea7dd6feb70
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1127.19.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 972.4 MiB
Name: centos7
ID: S6LA:H6UO:2ZUN:TOHH:M5KJ:2PDC:SZ63:73JJ:BZLX:TG6D:YPAO:PIFD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://123456.mirror.aliyuncs.com #此处为阿里云的加速地址
Live Restore Enabled: false
docker 安装成功。
2、通过 docker 安装一个 LAPM 架构
通过docker部署wordpress
2.1 下载wordpress和mariadb镜像包
[root@centos7 ~]# docker pull wordpress
[root@centos7 ~]# docker pull mariadb
[root@centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb latest 2ab9d091310d 3 days ago 414 MB
wordpress latest 6edecd0f5c75 9 days ago 546 MB
2.2 docker运行数据库服务
#运行数据库
[root@centos7 ~]# docker run --name mydb --env MYSQL_ROOT_PASSWORD=123456 -d mariadb
b3ad5231d2185930b788ed2bf997415e291246186faca77b78627a806a31b262
#docker run :表示从镜像运行为容器。
#--name mydb:然后给这个容器起起名为mydb。
#--env 向容器中注入环境变量。环境变量的好处是数据库在做初始化的时候,需要告诉他mysql的初始化密码为多少,而在这里我们可以通过指定环境变量的方式告诉他,我们现在的mysql初始化密码为多少。
#MYSQL_ROOT_PASSWORD=123456 : 这个是数据库的初始化密码。
#-d :放到后台运行,因为mysql是一个前台守护进程。
#mariadb:数据库的服务是mariadb
2.3运行wordpress
[root@centos7 ~]# docker run --name mywordpress --link mydb:mysql -p 8888:80 -d wordpress
28535b1048506d0eda21e1083702cb723b7c9aa3733fa170abe35b2c48d0e644
#docker run :表示从镜像运行为容器。
#--name mywordpress:给容器起名为mywordpress
#--link:表示为链接关系
#mydb:mysql:就是上面一条命令的mydb,然后mysql是他起的一个别名,他会向/etc/hosts文件里写一个解析记录,解析的值就是上一条命令中运行的容器地址,这样的话就可以通过别名来进行访问了
#-p 8080:80:表示的是端口映射,因为他是基于我们容器级别的隔离所以他会有自己独立的网络空间,怎么外网才可以访问他呢,做我们的dnat(反向代理将自己的服务端口暴露出去供外网访问) 映射。
#8080:表示本机的端口、80:表示容器的端口,也就是访问宿主机本机的8080端口就可以访问到容器的80端口。
#-d :放到后台运行,因为mysql是一个前台守护进程。
#word press:启动的是一个word press的容器
2.4 查看正在运行的容器
[root@centos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28535b104850 wordpress "docker-entrypoint..." 14 seconds ago Up 13 seconds 0.0.0.0:8888->80/tcp mywordpress
b3ad5231d218 mariadb "docker-entrypoint..." 2 minutes ago Up 2 minutes 3306/tcp mydb
2.5 进行安装wordpress
浏览器访问 :http://10.0.0.123:8888/
安装wordpress
wordpress安装成功。
3、写出 docker run 命令的延申指令,如怎么在停止一个 docker 容器的时候自动删除该容器
docker run [选项] [参数] [shell命令] [参数]
#选项:
-i : 以交互式模式运行容器,一般与 -t 一起使用.
-t : 为容器重新分配一个伪输入终端,通常与 -i一起使用
-d : 后台运行,默认是前台运行容器
--name : 运行容器时,起一个名字
--h : 指定主机名
--rm : 删除已经退出的容器
-P : 发布端口。把预先设定好的端口,发布出来.让其他机器能够访问。如http的80端口,发布出来,供其他机器访问
-p :发布容器的端口到宿主机 ,可以指定映射暴露的端口,如 -p 8888:80 就是把80端口映射成8888,供外界访问
--restart policy策略
--privileged :提升权限给容器使用 (root)
举例:运行完centos之后,删除容器
docker run --rm centos cat /etc/redhat-release #运行完容器之后,删除容器
4、写出 docker run 命令在自动启动 docker 服务时通过什么参数能够启动 docker 中的容器,从而实现容器随着 docker 服务的启动而自动启动
docker run --restart always httpd #随着docker的启动,而httpd容器也随之启动