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的相關操作
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