1 Docker的安裝及啓動
1.1安裝docker
- yum包更新到最新
yum update
- 安裝需要的軟件包,yun-uti提供yun-config-manager功能, 另兩個是devicemapper驅動依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
- 設置阿里雲的docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
如果裝了python3,並設置了環境變量,需要修改/usr/bin/yum-config-manager,指向python2。沒有安裝python3,請忽略。
- 安裝docker
yum install docker-ce
- 安裝後查看docker版本
docker -v
1.2 設置USTC鏡像
ustc是老牌Linux鏡像服務提供者, ustc的docker鏡像加速器速度很快, ustc docker mirror的優勢之一就是不需要註冊, 是真正的公共服務。
- 編輯文件
cd /etc/docker #如果該路徑不存在,請自行建立
touch daemon.json
chmod 777 daemon.json
- 在文件輸入以下內容
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
1.3 docker的啓動與停止
- 啓動docker
systemctl start docker
- 停止docker
systemctl stop docker
- 重啓docker
systemctl restart docker
- 查看docker狀態
systemctl status docker
- 開機啓動
systemctl enable docker
- 查看docker概要信息
docker info
- 查看docker幫助文檔
docker --help
2 Docker的常用命令
2.1 鏡像的相關命令
2.1.1 查看鏡像
docker images
命令之後的顯示
Repository: 鏡像名稱
Tag: 鏡像標籤
Imageid: 鏡像ID
Created: 鏡像的創建日期(不是獲取該鏡像的日期)
Size: 鏡像大小
這些鏡像是存儲在Docker宿主機的/var/lib/docker目錄下
2.1.2 搜索鏡像
docker search 鏡像名稱
查詢之後的結果:
Name: 倉庫名稱
Description: 鏡像描述
Stars: 用戶評價, 反應一個鏡像的受歡迎程度
Official: 是否官方
Automated: 自動構建, 表示該鏡像由Docker Hub自動構建流程創建的
2.1.3 拉取鏡像
docker pull 鏡像名稱
docker pull tomcat:8
拉取鏡像就是從中央倉庫中下載鏡像到本地
2.1.4 刪除鏡像
按照鏡像ID刪除鏡像
docker rmi 鏡像ID
刪除所有鏡像:
docker rmi `docker images -q`
2.2 容器的相關命令
2.2.1 查看容器
查看正在運行的容器
docker ps
查看最後一次運行的容器
docker ps -l
查看所有容器:
docker ps -a
查看停止的容器
docker ps -f status-exited
2.2.2 創建和啓動容器
創建容器命令
docker run
-i: 表示運行容器
-t: 表示容器啓動後會進入其命令行
加入這兩個參數後, 容器創建就能登陸進去, 即分配一個僞終端
--name: 爲創建的容器命名
-v: 表示目錄映射關係(前者是宿主機目錄, 後者是映射到宿主機上的目錄), 可以使用多個-v 做多個目錄或文件映射,
注意: 最好做目錄映射, 在宿主機上做修改, 然後共享到容器上.
-d: 在run後面加上-d參數, 則會創建一個守護式容器在後臺運行(這樣創建容器後不會自動登陸容器, 如果只加-i -t 兩個參數, 創建後會自動進去容器)
-p: 表示端口映射, 前者是宿主機端口, 後者是容器內的映射端口, 可以使用多個-p做多個端口映射
-e 表示設置環境變量
交互式方式創建容器(創建完就進入容器):
docker run -it --name-容器名稱 鏡像名稱:標籤(就是TGA) /bin/bash
說明: 通過命令ps 查看, 容器處於啓動狀態
退出當前容器
exit
守護式方式創建容器
docker run -di --name=容器名稱 鏡像名稱:標籤
登陸守護式容器方式
docker exec -it 容器名稱(或者容器id) /bin/bash
2.2.3 停止和啓動容器
docker start 容器名稱(或者容器ID)
docker restart 容器名稱(或者容器ID)
docker stop 容器名稱(或者容器ID)
2.2.4 文件拷貝
需要將文件拷貝到容器中可以使用cp命令
docker cp 需要拷貝的文件或者目錄(宿主機) 容器名稱:容器目錄
也可以將文件從容器內拷貝出來
docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄(宿主機)
2.2.5 目錄掛載
說明: 宿主機目錄與容器目錄映射, 當修改任意一方目錄及其文件的時候, 另一方目錄也會發生相應改變
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
2.2.6 查看容器ip地址
查看容器的所有數據
docker inspect 容器名稱(或者容器ID)
也可以從所有數據中進行篩選, 如下我要篩選容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(或者容器ID)
3 常用的軟件安裝
3.1 MySQL安裝
3.1.1 查看MySQL,尋找合適的鏡像
docker search mysql
3.1.2 拉取 MySQL 的鏡像新版本
筆者這裏拉取的是最新版本(最好拉取官方鏡像)
docker pull mysql:5.7
3.1.3 查看docker鏡像
docker images
3.1.4 創建掛載文件
- 到指定目錄
cd /opt/docker/mysql
- 級聯創建目錄
mkdir -p data conf
- 進入本地配置文件夾
cd /opt/docker/mysql/conf
- 創建配置文件
touch my.cnf
- 填寫自己的mysql配置
vim my.cnf # 如果沒有安裝vim,可以使用vi my.cnf
-我的配置,通常都是字符集與端口的配置,喜歡怎麼配置可以自己配
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置大小寫不敏感
lower_case_table_names=1
配置大小寫不敏感
lower_case_table_names=1
3.1.5 切忌:一定要設置權限
以後不論你們做什麼鏡像,凡是掛載目錄切記要爲目錄賦予權限否則,運行鏡像後會發現status 狀態爲exited。
chmod -R 777 mysql
修改文件的權限,修改爲只有root用戶可讀可寫
cd /opt/docker/mysql/conf
chmod 644 my.cnf
3.1.6 運行並掛載目錄
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true
-v /opt/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf
-v /opt/docker/mysql/data:/var/lib/mysql
-v /opt/docker/mysql/logs:/var/log/mysql
--restart=always mysql:5.7
解釋:
–restart=always
在docker服務重啓後,自動重啓mysql服務。也可以把docker作爲開機啓動,這樣mysql就可以開機啓動了。
3.1.7 查看端口是否開通
- 查看那些端口已經開通
firewall-cmd --list-ports
- 開通端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重啓防火牆
firewall-cmd --reload
- 查看端口是否開啓成功
firewall-cmd --zone=public --query-port=3306/tcp
3.2 Redis安裝
3.2.1 查看Redis,尋找合適的鏡像
docker search redis
3.2.2 拉取 Redis 鏡像
docker pull redis
3.2.3 查看docker鏡像
docker images
3.2.4 創建掛載文件
3.2.4.1 從官網獲取redis.conf配置文件
bind 127.0.0.1 #註釋掉這部分,這是限制redis只能本地訪問
protected-mode no #默認yes,開啓保護模式,限制爲本地訪問
daemonize no #默認no,改爲yes意爲以守護進程方式啓動,可後臺運行,除非kill進程,改爲yes會使配置文件方式啓動redis失敗
databases 15 #數據庫個數(可選)
dir ./ #輸入本地redis數據庫存放文件夾(可選)
appendonly yes #redis持久化(可選)
3.2.4.2 創建掛載的文件夾
- 進入本地配置文件夾
cd /opt/docker/redis/conf
- 級聯創建目錄
mkdir -p conf data
3.2.4.3 通過xftp等類似工具把上述修改好的redis.conf傳到本地配置文件夾
3.2.4.4 設置掛載文件的權限
筆者不再贅述,請參考mysql設置權限的方式
3.2.4.5 啓動redis
docker run -p 6379:6379 --name myredis
-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf
-v /opt/docker/redis/data:/data
-di redis redis-server /etc/redis/redis.conf
--appendonly yes
--requirepass "mypassword"
命令解釋說明:
-p 6379:6379 端口映射:前表示主機部分,:後表示容器部分。
--name myredis 指定該容器名稱,查看和進行操作都比較方便。
-v 掛載目錄,規則與端口映射相同。
-d redis 表示後臺啓動redis
redis-server /etc/redis/redis.conf 以配置文件啓動redis,加載容器內的conf文件,最終找到的是掛載的目錄/opt/docker/redis/conf/redis.conf
appendonly yes 開啓redis 持久化
requirepass "mypassword" 設置訪問密碼
3.2.4.6 開通端口
筆者不再贅述,請參考mysql開啓端口方式
3.2.5 登陸redis容器
3.3 mongoDB安裝
3.3.1 查看mongo,尋找合適的鏡像
docker search mongo
3.3.2 拉取mongo鏡像
docker pull mongo:4.2.3
3.3.3 查看docker鏡像
docker images
3.3.4 創建掛載文件
3.3.4.1 到達指定的文件目
cd /opt/docker/mongo
3.3.4.2 創建掛載的文件
mkdir db
3.3.4.3 設置掛載文件的權限
筆者不在贅述,請參考mysql設置權限的方式
3.3.4.4 啓動mongo
docker run -p 27017:27017
-v /opt/docker/mongo/db:/data/db
--name mongo
-di mongo:4.2.3 --auth
解釋說明:
–auth 開啓mongoDB的認證授權
3.3.4.5 開通端口
筆者不再贅述,請參考mysql開啓端口方式
3.3.5 登陸mongo容器
3.3.5.1 創建用戶
db.createUser({ user: 'root', pwd: 'root',
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
3.3.5.2 權限備註
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
3.4 nginx安裝
3.4.1 查看nginx,尋找合適的鏡像
docker search nginx
3.4.2 拉取nginx鏡像
docker pull nginx:1.17.9
3.4.3 查看docker鏡像
docker images
3.4.4 創建掛載文件
3.4.4.1 進入本地配置文件夾
cd /opt/docker/nginx #不存在請自行創建
3.4.4.2 級聯創建目錄
mkdir -p conf log html
mkdir conf/conf.d
3.4.4.3 通過xftp等類似工具把上述修改好的nginx.conf傳到本地配置文件夾
- nginx.conf: /opt/docker/nginx/conf/nginx.conf
- defaut.conf: /opt/docker/nginx/conf/conf.d/defaut.conf
- index.html 50x.html: /opt/docker/nginx/html
3.4.4.4 設置掛載文件的權限
筆者不再贅述,請參考mysql設置權限的方式
3.4.5 啓動nginx
docker run -di --name=mynginx -p 80:80
-v /opt/docker/nginx/log:/var/log/nginx
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
-v /opt/docker/nginx/html:/etc/nginx/html nginx:1.17.9
3.4.6 默認的nginx配置文件
nginx.conf : /opt/docker/nginx/conf/nginx.conf
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
# 以下爲外部添加配置文件
include /opt/docker/nginx/conf/conf.d/*.conf;
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream halo{
# 隨機負載
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
#server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_connect_timeout 3;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_pass http://halo;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
defaut.conf : /opt/docker/nginx/conf/conf.d/defaut.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
50x.html
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
<p>If you are the system administrator of this resource then you should check
the error log for details.</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>