利用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"]
}

注:進入阿里雲的容器鏡像服務,獲取更快的鏡像加速地址: 容器鏡像服務

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.拉取鏡像#如不指定鏡像版本(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

3.查看當前已下載的所有鏡像
[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

4.刪除鏡像(利用鏡像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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM