常用命令
刪除所有鏡像、容器
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)站代碼修改后,在容器中可以實時更新。
- 創(chuàng)建目錄
nginx/nginx,下載nginx配置文件。創(chuàng)建目錄nginx/website,下載網(wǎng)頁代碼 - 創(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
- 啟動容器
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
- 搭建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
- 搭建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
- 搭建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ù)共享