docker實踐

常用命令

刪除所有鏡像、容器

docker rmi $(docker images)
docker rm $(docker ps -aq)

dockerfile當前目錄構(gòu)建鏡像

docker build -t gqj/node .

dockerfile不在當前目錄構(gòu)建鏡像

docker build -t gqj/node -f /User/qgj/Dockfile_base .

以鏡像啟動容器

docker run -it --name nodeapp gqj/node

進入容器,redis-primary是容器名

docker exec -it redis-primary /bin/bash

網(wǎng)絡(luò)信息,express是網(wǎng)絡(luò)名

docker network inspect express

如果構(gòu)建鏡像失敗,找到容器ip,進入容器中查看

docker run -it sfavsdvsa /bin/bash

nginx應(yīng)用服務(wù)器

創(chuàng)建一個nginx web服務(wù)器鏡像,將網(wǎng)站代碼放到宿主機的一個目錄并掛載到nginx容器中。這樣在網(wǎng)站代碼修改后,在容器中可以實時更新。

  1. 創(chuàng)建目錄nginx/nginx,下載nginx配置文件。創(chuàng)建目錄nginx/website,下載網(wǎng)頁代碼
  2. 創(chuàng)建nginx鏡像
FROM nginx:1.17
RUN mkdir -p /var/www/html/website
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
  1. 啟動容器
docker run -d --name nginx -p 80 -v \ 
~/Documents/workspace/dockerwork/sample/website:/var/www/html/website \ 
gqj/nginx nginx

-v指定共享數(shù)據(jù)卷
訪問nginx映射端口,只跳轉(zhuǎn)到nginx歡迎頁面。進入容器后發(fā)現(xiàn)/etc/nginx/conf.d下還有配置文件default.conf,將該文件刪除,就可以訪問到靜態(tài)頁面。

案例2

創(chuàng)建一個拉取war包的容器pullwar,并指定一個掛載點。再創(chuàng)建另一個容器tomcat,和上一個容器共享掛載點。pullwar負責將war包拉取下來,tomcat負責啟動tomcat服務(wù)器。通過掛載點共享war包
1.創(chuàng)建pullwar容器
docker run -it --name pullwar gqj/pullwar https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
2.創(chuàng)建tomcat容器
docker run -d -P --name tomcat --volumes-from pullwar gqj/tomcat

node+redis+logstash

搭建一個node,一個redis集群,一個logstash日志收集器。node項目使用redis存儲session。logstash收集node和redis的日志。

1.創(chuàng)建網(wǎng)絡(luò),用到的容器都使用該網(wǎng)絡(luò)

docker network create express
  1. 搭建node
  • 宿主機創(chuàng)建目錄node/nodejs/nodeapp,將node項目代碼下載到該目錄
  • nodejs目錄中使用Dockerfile構(gòu)建鏡像,名稱為gqj/node
FROM node:8-jessie
RUN mkdir -p /var/log/nodeapp
#日志掛載點
VOLUME ["/var/log/nodeapp"]
#宿主機上代碼復(fù)制到容器
ADD nodeapp /opt/nodeapp/
WORKDIR /opt/nodeapp
RUN npm install
EXPOSE 3000
  • 創(chuàng)建容器
docker run -d -h nodeapp -p 3000:3000 --name nodeapp \ 
--net express gqj/node node server.js
  1. 搭建redis集群
  • 創(chuàng)建目錄node/redis,構(gòu)建鏡像,名稱為gqj/redis-base
FROM redis:5.0
RUN mkdir -p /var/lib/redis && chown redis:redis /var/lib/redis
RUN mkdir -p /var/log/redis/ && chown redis:redis /var/log/redis/
# 日志掛載點
VOLUME ["/var/lib/redis","/var/log/redis/"]
WORKDIR /var/log/redis
EXPOSE 6379
  • 構(gòu)建容器

主節(jié)點,名稱redis-primary

docker run -d -h redis-primary --name redis-primary \ 
--net express gqj/redis-base redis-server \ 
--logfile /var/log/redis/redis-server.log

從節(jié)點,名稱redis-slave01

docker run -d -h redis-slave01 --name redis-slave01 \ 
--net express gqj/redis-base redis-server \ 
--logfile /var/log/redis/redis-slave01.log \ 
--slaveof redis-primary 6379

臨時容器共享容器卷去查看日志信息

docker run -it --rm --volumes-from redis-primary \ 
ubuntu cat /var/log/redis/redis-server.log

訪問redis

docker -it --rm --net express redis-base redis-cli -h redis-primary
docker -it --rm --link redis-primary:redis-primary \ 
redis-base redis-cli -h redis-primary
  1. 搭建logstash
  • 創(chuàng)建node/logstash目錄,編寫logstash.conf
input {
  file {
    type => "syslog"
    path => ["/var/log/nodeapp/nodeapp.log", "/var/log/redis/redis-server.log"]
  }
}
output {
  stdout {
    codec => rubydebug
  }
}
  • 構(gòu)建鏡像,名稱為gqj/logstash
FROM docker.elastic.co/logstash/logstash:7.2.0@sha256:0cd49a095195ee2ad2414a438c0e565c4295e61baccf9441fbc805c278494aed
ADD logstash.conf /etc/
WORKDIR /opt/logstash
ENTRYPOINT ["bin/logstash"]
CMD ["-f","/etc/logstash.conf"]
  • 構(gòu)建容器,名稱為logstash
docker run -d -h logstash --name logstash \ 
--net express --volumes-from redis-primary \ 
--volumes-from nodeapp gqj/logstash

參考:
0.第一本Docker書
1.Docker 中通過 Volume 實現(xiàn)持久化存儲和數(shù)據(jù)共享

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容