Linux 系統 Docker 安裝與使用


下載/安裝 Docker

centos 安裝 docker 官方網址:https://docs.docker.com/engine/install/centos/

1、卸載已經安裝的docker舊版本

如果機器之前已經安裝過 docker,需要先執行命令,清除舊 docker

sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2、設置 docker 鏡像(阿里雲鏡像)

sudo yum install -y yum-utils

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

3、安裝 docker

sudo yum install docker-ce docker-ce-cli containerd.io

4、啟動 docker

sudo systemctl start docker

5、配置 docker 自啟動

sudo systemctl enable docker

6、驗證 docker 是否安裝成功

image-20201129225348847

配置 Docker 阿里雲鏡像

這里使用的是 阿里雲提供的鏡像加速 ,登錄並且設置密碼之后在左側的 Docker Hub 鏡像站點 可以找到專屬加速器地址,復制下來。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xedj96w5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker 常用命令

docker 服務相關命令

# 重啟 docker 服務
service docker restart
# 關閉 docker 服務
service docker stop
# 啟動 docker 服務
service dockers start

docker 鏡像相關命令

# 拉取鏡像
docker pull <鏡像名:tag>
# 查看鏡像
docker images
# 刪除鏡像
docker rmi 鏡像ID
# 強制刪除鏡像
docker rmi -f 鏡像ID
docker rm <容器名 或者 容器ID>

docker 容器相關命令

# 查看當前運行的容器
docker ps
# 查看所有存在的容器
docker ps -a
# 啟動容器
docker start 容器名稱/容器ID
# 停止容器
docker stop 容器名稱/容器ID
# 刪除容器
docker rm 容器名稱/容器ID
# 強制刪除容器
docker rm -f 容器名稱/容器ID
# 刪除所有容器(謹慎操作)
docker rm $(docker ps -a -q)
# 查看容器日志
docker logs -f 容器名稱/容器ID
# 進入容器
docker exec -it 容器名稱/容器ID /bin/bash

docker 運行相關命令

docker run -p 3306:3306 --name mysql \
-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

上面給出了一段 docker 容器運行命令,我們對其中一些關鍵參數進行分析:

  • 端口映射 -p:-p 3306:3306 表示將服務器 3306 端口映射到容器3306端口
  • 指定容器名稱 --name
  • 數據卷映射 -v:例如,-v /mydata/mysql/log:/var/log/mysql 則表示將服務器上 /mydata/mysql/log 文件夾下的內容與容器中 /var/log/mysql 進行映射,這樣改變容器外文件內容就會同步到容器中,更方便的對容器進行操作,是常用參數
  • 后台啟動 -d

Docker 安裝 Mysql 5.7

1、下載 mysql 鏡像

docker pull mysql:5.7

2、啟動 mysql 容器

docker run -p 3306:3306 --name mysql \
-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、創建mysql配置文件

vi /mydata/mysql/conf/my.cnf

# 添加如下內容
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

4、重啟 mysql

docker restart mysql

5、設置 mysql 自啟動

docker update mysql --restart=always

Docker 安裝 Mysql 8.0

1、下載 mysql 鏡像

docker pull mysql

2、啟動 mysql 容器

不建議將虛擬機端口映射設置為 3306,為了減少被攻擊的風險

正式的生成環境中建議將數據庫密碼設置復雜

docker run -p 33308:3306 --name mysql8 \
-v /mydata/mysql8/log:/var/log/mysql \
-v /mydata/mysql8/data:/var/lib/mysql \
-v /mydata/mysql8/conf:/etc/mysql \
-v /mydata/mysql8/mysql-files:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

3、創建mysql配置文件

vi /mydata/mysql/conf/my.cnf

# 添加如下內容
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

4、重啟 mysql

docker restart mysql8

5、設置 mysql 自啟動

docker update mysql8 --restart=always

Mysql8 遠程工具連接配置

登錄 Docker 中的 Mysql 存在兩種情況

第一種

  1. 使用命令 docker exec -it mysql /bin/bash 進入容器
  2. 使用命令 mysql -uroot -p 按下 enter 再按 enter 直接登錄到 Mysql 里面去,因為里面 root 用戶對應的密碼是空的
  3. 給 root 用戶設置密碼
# 修改用戶對應的密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新權限
flush privileges;
  1. 需要遠程連接時,執行如下命令
CREATE USER 'root'@'%' IDENTIFIED BY '用戶密碼';
flush privileges;
  1. 創建出來的用戶是沒有任何創建數據庫權限的,需要執行如下命令進行授權
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

第二種

  1. 在執行生成 mysql 容器的時候,我們設置了 mysql 初始密碼的,使用那個密碼,即可直接登錄到 mysql

說明一下 Mysql 的配置 my.cnf

[mysqld]
# 禁止表名大小寫驗證
lower_case_table_names=1
# 禁用dns解析,所以在mysql的授權表中就不能使用主機名了,只能使用IP
skip-name-resolve
# mysql8的安全機制升級而需要修改的配置,不配置的話將無法登錄管理
default_authentication_plugin= mysql_native_password

Docker 安裝 Redis

1、下載 redis 鏡像

docker pull redis

2、創建配置文件

# 創建文件夾,與容器內部文件進行映射
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

3、啟動容器

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

4、運行 redis 客戶端

docker exec -it redis redis-cli

5、開啟 aof 持久化

vi /mydata/redis/conf/redis.conf
# 添加如下內容
appendonly yes

6、重啟 redis

docker restart redis

7、設置 redis 自啟動

docker update redis --restart=always

Docker 安裝 ELK

1、下載 elasticsearch 和 kibana

docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2

2、配置

# 創建文件夾,與容器內部文件夾映射
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/data

# 允許任意客戶端連接es
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

# 修改 /mydata/elasticsearch 文件夾下所有內容讀寫權限
chmod -R 777 /mydata/elasticsearch/

3、啟動 elasticsearch 容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e  "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx562m" \
-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 \
-d elasticsearch:7.4.2 

4、設置開機啟動 elasticsearch

docker update elasticsearch --restart=always

5、啟動 kibana 容器

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

6、設置開機啟動 kibana

docker update kibana --restart=always

Docker 安裝 nginx

1、隨便啟動一個 nginx 實例,只是為了復制出配置

sudo docker run -p 80:80 --name nginx -d nginx:1.10

2、將容器內的配置文件拷貝到 /mydata/nginx/conf/ 下

sudo mkdir -p /mydata/nginx/html
sudo mkdir -p /mydata/nginx/logs
sudo mkdir -p /mydata/nginx/conf
sudo docker container cp nginx:/etc/nginx/   /mydata/nginx/conf/ 
#由於拷貝完成后會在config中存在一個nginx文件夾,所以需要將它的內容移動到conf中
sudo mv /mydata/nginx/conf/nginx/* /mydata/nginx/conf/
sudo rm -rf /mydata/nginx/conf/nginx
# 修改 /mydata/nginx 文件夾讀寫權限
sudo chmod -R 777 /mydata/nginx

3、終止原容器

sudo docker stop nginx

4、刪除原容器

sudo docker rm nginx

5、創建新的 nginx 容器

sudo docker run -p 80:80 --name nginx \
 -v /mydata/nginx/html:/usr/share/nginx/html \
 -v /mydata/nginx/logs:/var/log/nginx \
 -v /mydata/nginx/conf/:/etc/nginx \
 -d nginx:1.10

6、設置開機啟動 nginx

sudo docker update nginx --restart=always

7、創建/mydata/nginx/html/index.html文件,測試是否能夠正常訪問

#添加文件 index.html
sudo echo '<h2>hello nginx!</h2>' >> /mydata/nginx/html/index.html

#訪問 http://nginx所在主機的IP:80/index.html

Docker 安裝 nacos

1、拉取nacos鏡像

docker pull nacos/nacos-server
  1. 創建數據庫

MySQL創建數據庫名為 nacos_config 並導入官方腳本
nacos-db.sql

3、配置

mkdir -p /mydata/nacos/logs                
mkdir -p /mydata/nacos/init.d
touch /mydata/nacos/init.d/custom.properties
chmod -R 777 /mydata/nacos

4、啟動 nacos 容器

docker run -d --name nacos --network=host \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=localhost \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_DATABASE_NUM=1 \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /mydata/nacos/logs:/home/nacos/logs \
-p 8848:8848 \
nacos/nacos-server

Docker 安裝 seata-server

一、准備工作

1、Nacos安裝和配置

進入Nacos控制台,創建seata命名空間

image-20210109161626697

記住命名空間ID自定義為seata_namespace_id,后面需要

2、 Seata數據庫創建

創建數據庫名為seata,執行Seata的Github官方源碼中提供的的MySQL數據庫腳本

MySQL腳本地址: https://github.com/seata/seata/blob/1.4.1/script/server/db/mysql.sql

二、 seata-server安裝

1、隨便啟動一個 seata-server實例,只是為了復制出配置

docker run -d --name seata -p 8091:8091 seataio/seata-server

2、將容器內的配置文件拷貝到 /mydata/seata/ 下

sudo mkdir -p /mydata/seata
sudo docker cp seata:/seata-server  /mydata/seata

3、修改配置

修改registry.conf配置,類型選擇nacos,namesapce為上文中在nacos新建的命名空間id即seata_namespace_id,精簡如下:

vim /mydata/seata/seata-server/resources/registry.conf

registry {
  type = "nacos"
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    namespace = "seata_namespace_id"
    cluster = "default"
  }
}
config {
  type = "nacos"
  
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "seata_namespace_id"
    group = "SEATA_GROUP"
  }
}

4、終止原容器

sudo docker stop seata

5、刪除原容器

sudo docker rm -f seata

6、推送Seata依賴配置至Nacos

從Seata的GitHub官方源碼獲取配置文件(config.txt)和推送腳本文件(nacos/nacos-config.sh),復制到服務器

地址:https://github.com/seata/seata/blob/develop/script/config-center

因為腳本的關系,文件存放目錄如下

/mydata/seata/script
└── config-center
    ├── config.txt
    └── nacos
        └── nacos-config.sh

修改配置文件 config.txt

vi /mydata/seata/script/config-center/config.txt

修改事務組MySQL連接信息,修改信息如下:

# 修改默認事務組
service.vgroupMapping.mall_tx_group=default

#修改mysql連接信息
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://lcoalhost/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root

執行推送命令

sh /mydata/seata/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t seata_namespace_id -u nacos -w nacos
  • -t seata_namespace_id 指定Nacos配置命名空間ID
  • -g SEATA_GROUP 指定Nacos配置組名稱

如果有 init nacos config fail. 報錯信息,請檢查修改信息,如果有屬性修改提示failure,請修改config.txt中屬性。

如果出現類似 cat: /tmp/tmp.rRGz1B7MUP: No such file or directory 的錯誤不用慌,重新執行推送命令直至成功。

推送執行完畢,到Nacos控制台查看配置是否已添加成功

image-20210109170320475

7、啟動Seata容器

docker run -d --name seata --restart=always -p 8091:8091  \
-e SEATA_IP=localhost \
-e SEATA_CONFIG_NAME=file:/seata-server/resources/registry.conf \
-v /mydata/seata/seata-server/resources/registry.conf:/seata-server/resources/registry.conf \
-v /mydata/seata/logs:/root/logs \
seataio/seata-server
  • 如果雲主機不支持tcp6監聽的,使用 --network=host 替代 -p 8091:8091 指定Docker網絡模式為Host模式

Docker 安裝 RabbitMQ

1、拉取 RabbitMQ 鏡像

sudo docker pull rabbitmq:management

2、啟動 RabbitMQ 容器

sudo mkdir -p /mydata/rabbitmq

sudo docker run -d --name rabbitmq \
-v /mydata/rabbitmq:/var/lib/rabbitmq \
-p 5671:5671 \
-p 5672:5672 \
-p 4369:4369 \
-p 25672:25672 \
-p 15671:15671 \
-p 15672:15672 \
rabbitmq:management

3、設置開機啟動 RabbitMQ

sudo docker update rabbitmq --restart=always


免責聲明!

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



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