利用docker快速搭建服务器环境

1.安装docker

1.安装Linux虚拟机

1.VMWare、VirtualBox(选择这个轻量级虚拟机);

安装包版本:VirtualBox-6.1.4-136177-Win.exe

2.安装Linux系统

Linux系统版本:CentOS-6.8-x86_64-bin-DVD1.iso

视频讲解使用CentOS7,相对于7,6的配置相对麻烦一些

docker对Linux系统内核有要求,至少 3.10 以上

升级CentOS6内核

---------------------------centos6升级系统内核--------------------------------------------
1.升级系统内核
查看内核版本:

uname -r

2.6.32-573.8.1.el6.x86_64

导入elrepo的key:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org


curl 报ssl错误,解决办法:

yum update -y nss curl libcurl openssh


安装elrepo.repo:

rpm -Uvh https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm


安装内核:

(安装最新版内核)

yum --enablerepo=elrepo-kernel -y install kernel-ml

(安装长期稳定版内核)

yum --enablerepo=elrepo-kernel -y install kernel-lt

修改grub.conf文件:

vim /etc/grub.conf --> default=0


重启服务器查看内核:

reboot
uname -r
4.4.162-1.el6.elrepo.x86_64
--------------------------------------------------------------------------------------

3.虚拟机网络设置(主机连接虚拟机,虚拟机通过主机连接外网);

1.查看windows网络适配器,VirtualBox Host-Only Network,将Ip设置为自动获取

虚拟机获取到的IP通常会是192.168.56....

2.VirtualBox需要设置两张网卡;

网卡一,网卡一也可以调整为“桥接网卡”,连接方式选择”网线“或者”WiFi“;

网卡二

3.Linux系统的IP查询

ip addr

4.使用客户端连接虚拟机上的Linux服务器进行命令操作;

2.docker安装

安装docker(CentOS6.8)

-------------------安装docker------------------------------------------------
#安装docker(CentOS6.8)
1.要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看

uname -r

2、用yum源安装
2.1 查看是否已安装docker列表

yum list installed | grep docker

2.2 安装docker

yum -y install docker
-y表示不询问安装,直到安装成功,安装完后再次查看安装列表

2.2.1.yum没有找到docker包,更新epel第三方软件库,
运行命令:

sudo yum install epel-release

之后运行安装docker

yum install https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1.7.1-1.el7.x86_64.rpm

#启动/停止docker
[root@localhost /]# service docker start
Starting docker:	                                   [确定]
[root@localhost /]# service docker stop
停止 docker:                                              [确定]

#查看启动docker状态

[root@localhost /]# service docker status
docker (pid  2781) 正在运行...

    查看启动日志
[root@localhost /]# tail /var/log/docker

    将docker加入开机启动
[root@localhost /]# chkconfig docker on
    基本信息查看
[root@localhost /]# docker -v
    docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等

3.CentOS7安装虚拟机、docker相关操作

1.安装后网络配置文件修改

#打开网络配置文件夹
cd /etc/sysconfig/network-scripts/
#修改网络设置
vi ifcfg-enp0s3

网络设置文件内容

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#使用静态IP
BOOTPROTO=static
#BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=cc3f9483-cc3b-4140-b02f-6284e5cdcf39
DEVICE=enp0s3
#改为yes
ONBOOT=yes
#配合静态IP设置的配置
IPADDR=192.168.1.89 #设置静态IP
GATEWAY=192.168.1.2  #设置网关
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.8.8  #设置主DNS
DNS2=192.168.4.4  #设置备DNS

虚拟机系统静态IP配置的依据:根据电脑的网络设置信息进行配置

配置静态IP后,如果不能连接外网,则需要额外设置dns

vi /etc/NetworkManager/NetworkManager.conf
#找到NetworkManager.conf文件,修改文件,增加:
dns=none

cat /etc/resolv.conf
#查看resolv.conf文件是否有ifcfg-enp0s3中的dns配置,没有的话需要增加
# Generated by NetworkManager
nameserver 192.168.8.8
nameserver 192.168.4.4

2.VirtualBox需要设置一张网卡

网卡一调整为“桥接网卡”,连接方式选择”网线“或者”WiFi“;

3.安装docker(CentOS7)

#安装docker(CentOS7)
1.要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看

uname -r

2、用yum源安装
2.1 查看是否已安装docker列表

yum list installed | grep docker

2.2 安装docker

yum -y install docker
-y表示不询问安装,直到安装成功,安装完后再次查看安装列表
#查看Docker版本。执行命令
docker version

#启动、停止docker
#启动Docker。执行命令 
sudo systemctl start docker

#查看docker状态
systemctl status docker

# 设置开机启动docker
systemctl enable docker

# 将指定用户添加到用户组
usermod -aG docker root

#设置镜像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

注:进入阿里云的容器镜像服务,获取更快的镜像加速地址: 容器镜像服务

docker 容器启动报错"container init exited prematurely"

解决办法:

因为 linux 与 docker 版本的兼容性问题,可以尝试重新安装 docker

1.卸载旧版本 docker

yum remove docker  docker-common docker-selinux dockesr-engine -y

2.升级系统软件

yum upgrade -y

3.安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.添加软件源信息

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.更新并安装 docker-ce

yum makecache fast
yum install docker-ce -y

6.启动服务

systemctl daemon-reload
systemctl restart docker

2.docker的相关操作

docker仓库地址

1.docker的镜像操作

1.搜索镜像
[root@localhost /]# docker search oracle
#名字         描述                                         关注人数    是否官方
NAME        DESCRIPTION                                   STARS     OFFICIAL   AUTOMATED
oraclelinux Official Docker builds of Oracle Linux.         641       [OK]       
jaspeen/oracle-11g Docker image for Oracle 11g database     154                  [OK]

2.查询镜像对应版本
[root@localhost ~]# docker search nacos
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/nacos/nacos-server                   This project contains a Docker image meant...   258                  [OK]
docker.io   docker.io/nacos/nacos-mysql                                                                    6                    
docker.io   docker.io/nacos/nacos-mysql-master             nacos-mysql-master                              6                    
[root@localhost ~]# curl https://registry.hub.docker.com/v1/repositories/nacos/nacos-server/tags
[{"layer": "", "name": "latest"}, {"layer": "", "name": "0.5.0"}, {"layer": "", "name": "0.6.0"}, {"layer": "", "name": "0.7.0"}, {"layer": "", "name": "0.8.0"}, {"layer": "", "name": "0.9.0"}, {"layer": "", "name": "1.0.0"}, {"layer": "", "name": "1.0.0-RC1"}, {"layer": "", "name": "1.0.0-RC3"}, {"layer": "", "name": "1.0.1"}, {"layer": "", "name": "1.1.0"}, {"layer": "", "name": "1.1.3"}, {"layer": "", "name": "1.1.4"}, {"layer": "", "name": "1.2.0"}, {"layer": "", "name": "1.2.0-beta.0"}, {"layer": "", "name": "1.2.1"}, {"layer": "", "name": "1.3.0"}, {"layer": "", "name": "1.3.1"}, {"layer": "", "name": "1.3.2"}, {"layer": "", "name": "1.4.0"}, {"layer": "", "name": "1.4.0-BETA"}, {"layer": "", "name": "1.4.1"}, {"layer": "", "name": "1.4.2"}, {"layer": "", "name": "2.0.0"}, {"layer": "", "name": "2.0.0-bugfix"}, {"layer": "", "name": "2.0.1"}, {"layer": "", "name": "2.0.2"}, {"layer": "", "name": "2.0.3"}, {"layer": "", "name": "2.0.3-slim"}, {"layer": "", "name": "2.0.4-slim"}, {"layer": "", "name": "2.1.0-BETA"}, {"layer": "", "name": "latest-slim"}, {"layer": "", "name": "v1.4.3"}, {"layer": "", "name": "v2.0.3"}, {"layer": "", "name": "v2.0.4"}, {"layer": "", "name": "v2.0.4-slim"}, {"layer": "", "name": "v2.1.0"}, {"layer": "", "name": "v2.1.0-BETA"}, {"layer": "", "name": "v2.1.0-slim"}]
[root@localhost ~]# curl https://registry.hub.docker.com/v1/repositories/nacos/nacos-server/tags | python -m json.tool | grep 2.1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1319    0  1319    0     0    724      0 --:--:--  0:00:01 --:--:--   724
        "name": "1.2.1"
        "name": "2.1.0-BETA"
        "name": "v2.1.0"
        "name": "v2.1.0-BETA"
        "name": "v2.1.0-slim"
[root@localhost ~]# docker pull nacos/nacos-server:1.2.1

3.拉取镜像#如不指定镜像版本(tags),默认下载最新镜像(latest) 示例:docker pull mysql:5.5 下载5.5版本的mysql
[root@localhost /]# docker pull oraclelinux
latest: Pulling from oraclelinux
3690474eb5b4: Pull complete 
34ade45f1a85: Pull complete 
c0ef32604d47: Pull complete 
Digest: sha256:7e859d3436f2d42fab908855bf4d366abb0a2c8eb6618744448ced2b08dadf2f
Status: Downloaded newer image for oraclelinux:latest

4.查看当前已下载的所有镜像
[root@localhost /]# docker images
REPOSITORY       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tomcat          latest              0c1079259533        5 days ago          528.4 MB
oraclelinux     latest              c0ef32604d47        13 days ago         232.5 MB

5.删除镜像(利用镜像ID删除)
[root@localhost /]# docker rmi 0c1079259533

2.docker的容器操作

操作 命令 说明
运行 docker run --name container-name -d image-name
eg:docker run --name myRedis -d redis
--name:自定义容器名
-d:后台运行
image-name:指定镜像模板
列表 docker ps (查看运行中的容器) 加上-a;可以查看所有容器
停止 docker stop container-name/container-id 停止当前你运行的容器
启动 docker start container-name/container-id 启动容器
删除 docker rm container-id 删除指定容器
端口映射 -p 6379:6379 -p:主机端口(映射到)容器内部的端口
容器日志 docker logs container-name/container-id
更多命令 http://docs.docker.com/engine/reference/commandline/docker
1.启动容器(后台启动一个叫做myTomcat的容器)
docker rum --name myTomcat -d -p 8888:8080 tomcat

2.为了演示方便关闭Linux防火墙
#CentOS7
service firewalld status;查看防火墙状态
service firewalld stop;关闭防火墙
#CentOS6
service iptables status;
service iptables stop;

3.查看容器日志
docker logs container-name/container-id

3.制作容器启动脚本

docker启动脚本文件:dockerStart.sh

注意: 第一行一定是#! /bin/bash它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。

示例脚本:initDocker.sh如下,详细脚本后面解释

#! /bin/bash
#查看现有镜像
docker images
#创建MySql容器并启动,设置数据库字符集,识别小写的表名
docker run --name ISql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1
#创建Redis容器并启动
docker run -d -p 6379:6379 --name IRedis redis
#创建RabbitMQ容器并启动
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
#查看当前运行的容器
docker ps

如果执行脚本报“权限不够”的错误时,需要执行以下语句后,再执行脚本

chmod 777 ./dockerInit.sh

如果容器正常启动,但是端口无法访问,可能是防火墙拦截的原因

#CentOS7防火墙操作
#查看防火墙的状态的命令为:
sudo systemctl status firewalld

#打开防火墙的方式有两种,一种是打开后重启会恢复回原来的状态,命令为:sudo systemctl start firewalld;另一种是打开后重启不会恢复到原来的状态,命令为:sudo systemctl enable firewalld,这种方式输入命令后要重启系统才会生效。

#关闭防火墙的方式也有两种,和打开相对应,命令分别为
sudo systemctl stop firewalld
#设置开机不启动防火墙
sudo systemctl disable firewalld

1.docker 中开起Redis客户端的命令

#打开docker中的redis客户端
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
6a18e2b636ca        rabbitmq:management   "docker-entrypoint..."   12 days ago         Up 2 minutes        4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   some-rabbit
acfe57c0681a        redis                 "docker-entrypoint..."   13 days ago         Up 2 minutes        0.0.0.0:6379->6379/tcp                                                                       IRedis
5aeb04ea82ea        mysql:latest          "docker-entrypoint..."   13 days ago         Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp                                                            ISql
[root@localhost ~]# docker exec -it acfe57c0681a redis-cli

2.对mysql容器创建数据库表映射(删容器,不会删表)

1.设置开机自启动

​ 在容器镜像初始化后可以设置镜像的开机自启动;

#设置镜像的开机自启动
sudo docker update ISql --restart=always
sudo docker update IRedis --restart=always
sudo docker update some-rabbit --restart=always

2.设置docker容器的存储映射

#redis需要提前创建好文件加、文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name IRedis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

docker run -p 3306:3306 --name ISql \
-v /mydata/mysql/log/var/log/mysql \
-v /mydata/mysql/data/var/lib/mysql \
-v /mydata/mysql/conf/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

3.镜像容器初始化脚本

#! /bin/bash
#查看现有镜像
docker images
#创建MySql容器并启动,设置数据库字符集,识别小写的表名
#mysql8镜像时加载指定的外部配置文件和存储目录,在启动容器时 需要加上 -v /home/mysql/mysql-files:/var/lib/mysql-files/
#CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:
#1.在运行容器的时候,给容器加特权,及加上 --privileged=true 参数
#2.临时关闭selinux: setenforce 0
#3.添加selinux规则,改变要挂载的目录的安全性文本--privileged=true \
docker run --name ISql -p 3306:3306 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf/my.cnf:/etc/my.cnf \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/mysql-files:/var/lib/mysql-files \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
-d mysql:latest
#redis做存储映射,需要提前创建好文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
#创建Redis容器并启动
docker run -p 6379:6379 --name IRedis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
--privileged=true \
--restart=always \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes
#创建RabbitMQ容器并启动
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 --restart=always rabbitmq:management
#查看当前运行的容器
docker ps

4.mysql 8.0配置文件

vi /mydata/mysql/conf/my.cnf
chmod 644 my.cnf
###############################################################################

# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4


[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#设置默认身份验证插件,用于工具远程连接
default_authentication_plugin = mysql_native_password

# Custom config should go here
#不区分大小写配置
lower_case_table_names=1
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

5.Mysql8.0设置远程访问用户

#进入Mysql容器
docker exec -it ISql /bin/bash
#root访问mysql客户端
mysql -u root -p
#创建用户(root)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#赋予全部库的全部权限给新建用户(root)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
#退出mysql客户端
exit
#退出容器
exit
#重启Mysql容器
docker restart ISql

3.安装elasticsearch和kibana

#拉取镜像
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2

#创建实例
#Elasticsearch
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
#宿主系统对docker赋权限
chmod 777 /mydata/elasticsearch/config/elasticsearch.yml
chmod 777 /mydata/elasticsearch/data

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--privileged=true \
--restart=always \
-d elasticsearch:7.4.2

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.103:9200 -p 5601:5601 \
-d kibana:7.4.2

#http://192.168.56.103:9200 一定改为自己虚拟机的地址

3.1.相关报错

#解决报错WARNING: IPv4 forwarding is disabled. Networking will not work.
#报错:
# docker run -it ubuntu /bin/bash
#WARNING: IPv4 forwarding is disabled. Networking will not work.

#解决方式:
#第一步:在宿主机上执行
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
#第二步:重启network和docker服务
systemctl restart network && systemctl restart docker

4.清理docker的僵尸文件

#
docker system prune
docker volume prune

5.解决docker容器与宿主机时间不同步的问题

共享主机的localtime (方法一)(未测试)

创建容器的时候指定启动参数,挂载localtime文件到容器内 ,保证两者所采用的时区是一致的。

docker run --name <name> -v /etc/localtime:/etc/localtime:ro

复制主机的localtime (方法二)(已测试可用)

docker cp /usr/share/zoneinfo/Asia/Shanghai {容器ID或者NAME}:/etc/localtime

在完成后,再通过date命令进行查看当前时间。

docker镜像导出与离线安装

导出镜像

#docker save -o [文件名] [镜像名]
#示例
docker save -o nacos-server.docker nacos/nacos-server:1.3.2

安装镜像

#docker load -i [文件名]
#示例
docker load -i nacos-server.docker
posted @ 2020-08-12 22:48  howard4  阅读(4309)  评论(0编辑  收藏  举报