安裝
文檔資源?https://docs.docker.com/install/linux/docker-ce/centos/
1.檢查系統(tǒng)是否安裝過docker相關(guān)的軟件包,執(zhí)行以下命令花鹅,進(jìn)行全面下載
sudo yum remove docker \
? ? ? ? ? ? ? ? docker-client \
? ? ? ? ? ? ? ? docker-client-latest \
? ? ? ? ? ? ? ? docker-common \
? ? ? ? ? ? ? ? docker-latest \
? ? ? ? ? ? ? ? docker-latest-logrotate \
? ? ? ? ? ? ? ? docker-logrotate \
? ? ? ? ? ? ? ? docker-engine
2.安裝前先設(shè)置docker的存儲庫
a.存儲庫依賴
sudo yum install -y yum-utils \
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?device-mapper-persistent-data \
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?lvm2
b.設(shè)置存儲庫
sudo yum-config-manager \
? ? ? ? ?--add-repo \
? ? ? ? https://download.docker.com/linux/centos/docker-ce.repo
3.安裝最新版本的Docker CE和containerd
sudo yum install -y docker-ce docker-ce-cli containerd.io
這里是自動選擇最新版的正压,如果需要其他版本锨络,可自行到https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1查看
配置
1.修改默認(rèn)存儲路徑
docker 默認(rèn)的存儲路徑在 /var/lib/docker下面忧饭,這里舉例修改為 /soft/data/docker 县忌,事先記得準(zhǔn)備好對應(yīng)的文件夾僧凰。
a.修改docker.service文件探颈,在里面的EXECStart的后面追加代碼
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph /soft/data/docker
b.重新 enable 一下docker 服務(wù) 重新進(jìn)行軟連接 以及進(jìn)行一次 daemon-reload
systemctl stop docker
systemctl disable docker
systemctl enable docker
systemctl?daemon-reload
systemctl start docker
c.查看 docker info 信息,執(zhí)行命令?docker info 即可
測試
1.使用鏡像hello-world經(jīng)行體驗?sudo docker run hello-world
異常警告
1.出現(xiàn)?WARNING: bridge-nf-call-iptables is disabled 和 WARNING: bridge-nf-call-ip6tables is disabled 警告
解決:vim /etc/sysctl.conf 训措, 追加一下兩行膝擂,然后執(zhí)行 sysctl -p
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
相關(guān)命令
docker search 關(guān)鍵字 # docker鏡像搜索??
systemctl status docker # 查看docker是否運行
docker images # 查看已有的鏡像
docker pull 鏡像名稱:TAG標(biāo)簽 # 下載鏡像,如?docker pull redis:5.0.5
docker rmi 鏡像id # 刪除鏡像
docker ps -a # 查看全部容器隙弛,不加 -a 表示進(jìn)查詢當(dāng)前運行的容器
docker start 容器名稱或id # 啟動指定容器架馋,如??docker start redis_6379
docker stop 容器名稱或id?# 停止指定容器,如??docker stop redis_6379
docker rm -v 容器名稱或id?# 刪除指定容器全闷,如??docker rm -v redis_6379?
docker exec -it 容器名稱或id /bin/bash # 進(jìn)入容器shell
docker inspect 容器名稱或id | grep Mounts -A 顯示的行數(shù) #查看容器目錄映射
鏡像與容器
一叉寂、redis
1.文檔準(zhǔn)備
https://hub.docker.com/_/redis?docker-redis參考文檔
https://redis.io/topics/config?redis參考文檔
2.查詢可用的redis鏡像,選擇合適的版本進(jìn)行下載总珠。鏈接:https://hub.docker.com/_/redis
這里使用 5.0.5 版本屏鳍,使用命令?docker pull redis:5.0.5 經(jīng)行下載。下載完成后局服,使用?docker images 可查看下載的鏡像
3.準(zhǔn)備兩個目錄?/soft/data/redis/conf 和?/soft/data/redis/data 前者存放配置文件钓瞭,后者存放持久化數(shù)據(jù)文件
redis.conf 文件下載地址?https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf?(5.0版本)
修改redis.conf。這里演示只修改兩項
bind 0.0.0.0 #訪問IP綁定
dir /data/ #持久化數(shù)據(jù)存放目錄
requirepass myPassWord #指定密碼
4.運行鏡像并生成指定容器
docker run -p 6379:6379 -v /soft/data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /soft/data/redis/data:/data --name redis_6379 -d redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf
簡要解釋:
a. -p 6379:6379 端口映射淫奔,外面的6379端口映射到容器的6379端口
b.?-v /soft/data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 配置文件映射山涡,使用?/soft/data/redis/conf/redis.conf 作為配置文件
c.?-v /soft/data/redis/data:/data 目錄映射,使用容器外的?/soft/data/redis/data 作為存放目錄
d.--name redis_6379 指定容器名字
e.?-d 表示后臺運行
f.?redis:5.0.5 鏡像名稱及其標(biāo)簽(TAG)
5.驗證使用 docker exec -it redis_6379 redis-server -v 查看容器內(nèi)的redis版本?
二、手工構(gòu)建Dockerfile來運行spring boor的jar
1.準(zhǔn)備目錄?/soft/data/my-docker 鸭丛,?/soft/data/my-docker/data竞穷,?/soft/data/my-docker/tmp
2.進(jìn)入/soft/data/my-docker,創(chuàng)建Dockerfile文件鳞溉,內(nèi)容如下:
FROM openjdk:8u212-jre
# 環(huán)境變量設(shè)置?
ENV ENV_VALUE1 docker-env-value1
# 設(shè)置時區(qū)?
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone?
VOLUME /tmp
WORKDIR /data
COPY ./my-docker.jar /data/app.jar
CMD ["java", "-jar", "app.jar", "--spring.profiles.active=test"]
簡要解釋:
a.FROM openjdk:8u212-jre瘾带,指定基礎(chǔ)鏡像,可理解為java環(huán)境
b.VOLUME /tmp熟菲,默認(rèn)情況下看政,spring boot內(nèi)嵌了tomcat,其臨時文件將會在 /tmp 目錄中生成抄罕,因此需要加載此卷
c.WORKDIR /data允蚣,指定工作目錄,可理解為安裝目錄(PS:后面app.jar將在這里面)
d.COPY ./my-docker.jar /data/app.jar贞绵,將指定文件復(fù)制到容器內(nèi)厉萝,注意:/data/app.jar是容器內(nèi)的恍飘,與上面的WORKDIR對應(yīng)
e.CMD ["java", "-jar", "app.jar"]榨崩,執(zhí)行腳本命令,品味一下空格和逗號
3.使用命令 docker build -t my-docker:0.0.1 . (后面還有一個點)創(chuàng)建鏡像章母,完成后使用?docker images 查看鏡像
4.運行鏡像并生成指定容器母蛛,命令:docker run -p 8080:9527 -v /soft/data/my-docker/tmp:/tmp -v /soft/data/my-docker/data:/data/my-docker --name my-docker -d my-docker:0.0.1
5.查看正在運行的容器,docker ps乳怎,如果存在my-docker說明啟動成功彩郊。附上my-docker這個小demo的目錄與配置
三、簡單文檔管理 MinDoc
1. 相關(guān)文檔
a.Mindoc官網(wǎng):https://www.iminho.me/
b.Mindoc GitHub:https://github.com/lifei6671/mindoc
c.Mindoc幫助文檔:https://www.iminho.me/wiki/docs/mindoc/mindoc-docker.md
2.目錄準(zhǔn)備
mkdir /soft/data/mindoc
cd?/soft/data/mindoc/
mkdir conf database logs uploads
3.在GitHub中下載配置文件app.conf蚪缀,并存放到conf文件夾中秫逝,以備以后實現(xiàn)自定義配置
4.創(chuàng)建Dockerfile,內(nèi)容:FROM registry.cn-hangzhou.aliyuncs.com/mindoc/mindoc:v2.0?询枚,這里的 "v2.0" 可從GitHub的release中查詢
5.獲取MinDoc鏡像:docker build -t mindoc:v2.0 . (注意這里有一個點)
6.運行鏡像并生成指定容器
docker run --name=mindoc_8181 --restart=always -v /soft/data/mindoc/conf/app.conf:/mindoc/conf/app.conf -v /soft/data/mindoc/uploads:/mindoc/uploads -v /soft/data/mindoc/database:/mindoc/database -v /soft/data/mindoc/logs:/mindoc/runtime/logs -e MINDOC_DB_ADAPTER=sqlite3 -e MINDOC_DB_DATABASE=./database/mindoc.db -e MINDOC_CACHE=true -e MINDOC_CACHE_PROVIDER=file -e MINDOC_ENABLE_EXPORT=true -p 8181:8181 -d registry.cn-hangzhou.aliyuncs.com/mindoc/mindoc:v2.0
7.容器成功運行后违帆,執(zhí)行 docker ps 可看到下圖所示
8.注意,此處進(jìn)入容器內(nèi)部使用的命令為?docker exec -it mindoc_8181 /bin/sh金蜀,后面是 "?/bin/sh " !
四刷后、nginx
1.相關(guān)文檔
a.docker-nginx參考文檔?https://hub.docker.com/_/nginx
2.準(zhǔn)備目錄conf,conf.d渊抄,html尝胆,log,和ssl护桦,命令?mkdir -p /soft/data/nginx/{conf,conf.d,html,log,ssl}
3.準(zhǔn)備nginx的配置文件nginx.conf和default.conf
#nginx.conf
user nginx;
worker_processes? 1;
error_log? /var/log/nginx/error.log warn;
pid? ? ? ? /var/run/nginx.pid;
events {
? ? worker_connections? 1024;
}
http {
? ? include? ? ? /etc/nginx/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? /var/log/nginx/access.log? main;
? ? sendfile? ? ? ? on;
? ? #tcp_nopush? ? on;
? ? keepalive_timeout? 65;
? ? #gzip? on;
? ? include /etc/nginx/conf.d/*.conf;
}
#default.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;
? ? #}
}
準(zhǔn)備html頁面index.html含衔,并存放到html文件夾中
<html>
<head><title>hello</title></head>
<body>
<center><h1>hello world</h1></center>
</body>
</html>
4.在docker倉庫中查找所需要的nginx版本,鏈接:https://hub.docker.com/_/nginx,這里選擇1.17.1
使用命令?docker pull nginx:1.17.1 下載鏡像
5.運行鏡像并生成指定容器:docker run --name nginx_8080 -d -p 8080:80 -v /soft/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /soft/data/nginx/conf.d:/etc/nginx/conf.d -v /soft/data/nginx/html:/usr/share/nginx/html -v /soft/data/nginx/ssl:/usr/share/nginx/ssl -v /soft/data/nginx/log:/var/log/nginx nginx:1.17.1
6.打開鏈接 http://192.168.xx.xxx:8080/ 出現(xiàn)下圖所示抱慌,說明nginx啟動成功
7.附:進(jìn)入容器內(nèi)部的命令為?docker exec -it nginx_8080 /bin/bash
參考資料
1.深入理解Docker Volume(一)http://dockone.io/article/128