Docker及主要軟件的安裝(基於centos 7 以及 root 用戶)

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

search mysql

3.1.2 拉取 MySQL 的鏡像新版本

筆者這裏拉取的是最新版本(最好拉取官方鏡像)

docker pull mysql:5.7

3.1.3 查看docker鏡像

docker images

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

search redis

3.2.2 拉取 Redis 鏡像

docker pull redis

3.2.3 查看docker鏡像

 docker images

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容器

登陸redis的示意圖

3.3 mongoDB安裝

3.3.1 查看mongo,尋找合適的鏡像

docker search mongo

search mongo

3.3.2 拉取mongo鏡像

docker pull mongo:4.2.3

3.3.3 查看docker鏡像

docker images

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容器

登陸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

docker nginx

3.4.2 拉取nginx鏡像

docker pull nginx:1.17.9

3.4.3 查看docker鏡像

docker images

dpcker 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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章