当前位置:   article > 正文

docker 安装和使用_docker mirrors

docker mirrors

一、centos7 安装docker

    1:删除老版本

  1. yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine

    2:安装一些必要的系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

    3:添加软件源信息

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    4:更新 yum 缓存

yum makecache fast

   5:安装 Docker-ce

yum -y install docker-ce

   6:启动 Docker 后台服务

  1. systemctl enable docker
  2. systemctl start docker

  7:docker镜像加速

  创建或修改/etc/docker/daemon.json

  1. {
  2. "registry-mirrors":[
  3. "https://docker.mirrors.ustc.edu.cn",
  4. "https://registry.docker-cn.com"
  5. ]
  6. }
  1. systemctl daemon-reload
  2. systemctl restart docker

  docker info在结果中查看配置是否成功

  docker默认安装目录为/var/lib/docker

  docker服务日志:/var/log/messages

  docker容器日志:/var/lib/docker/cintainers/id/...json.log

    8:Docker 修改默认存储路径

        修改docker systemd的 docker.service配置(可以通过systemctl status docker查看路径Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled))

        修改EXECStart:EXECStart=/usr/bin/dockerd --graph /home/docker

        systemctl disabke docke && systemctl enable docke && systemctl daemon-reload && systemctl start docke

        通过docker info 查看是否修改成功

    9:Docker 修改默认容器日志大小

        vim /etc/docker/daemon.json

        {"registry-mirrors": [],"log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"}} // max-size 容器日志上线,max-file容器日志个数

        systemctl daemon-reload    systemctl restart docker  注:设置的大小只对新创建的容器有效

    10:开启2375端口远程访问

        vim /usr/lib/systemd/system/docker.service:
        在 ExecStart=/usr/bin/dockerd 后 增加  -H tcp://0.0.0.0:2375 -H                unix://var/run/docker.sock

        重新读取配置 systemctl daemon-reload

        重启 systemctl restart docker

    11:添加私有镜像仓库

        方式一:vim  /usr/lib/systemd/system/docker.service

                      在 ExecStart=/usr/bin/dockerd 后 增加 --insecure-registry ip

                      systemctl daemon-reload    systemctl restart docker

        方式二:vim /etc/docker/daemon.json

                       {"registry-mirrors": [], "insecure-registries": ["ip"]}
                       insecure-registries可以避免非https的私服不能pull镜像的问题

                       systemctl daemon-reload    systemctl restart docker

    12:docker启动报错
        在启动docker容器时报:Error response from daemon: driver failed programming external connectivity on endpoint XXX(端口映射或启动容器时报错)
        原因是我们启动docker后对防火墙进行了操作,需要重启docker来解决

二、docker常用命令

    docker pull name:latest获取镜像
    docker run -d name:latest快速部署和启动镜像
                      --name name容器名称
                      --hostname=""   -h指定容器的主机名
                      --add-host host:127.0.0.1启动时增加hosts到容器
                      --link name:name链接到另一个容器1.12可被network替代
                      --net bridge指定容器的网络连接类型
                      --network name指定加入到名为name的网络中可通过docker network ls查看
                      --network-alias指定容器name网络中的别名是bvrfis-net
    docker start [NAME|ID]启动容器服务
    docker stop [NAME|ID]停止容器服务
    docker restart [NAME|ID]重启容器服务
    docker rm [NAME|ID]删除容器
    docker rm $(docker ps -a -q)删除所有非启动状态的容器
    docker images 查看本机镜像
    docker search [name]查找镜像
    docker tag [NAME|ID] msg给镜像设置标签
    docker ps -a 查看镜像进程 后面加 --no-trunc 可看详情
    docker logs -f [NAME|ID]查看容器日志 --tail 100
    docker port [NAME|ID]查看容器进程
    docker top [NAME|ID]查看容器端口
    docker inspect [NAME|ID]查看容器底层信息JSON
    docker attach [NAME|ID]进入容器exit会导致容器停止
    docker exec -it [NAME|ID] /bin/bash
    docker run -it --rm -v "$(pwd)":/app -w /app  my/maven mvn clean package -DskipTests=true
    docker cp [NAME|ID]:/etc/mysql/my.cnf /home/tom/

    docker network的常用命令如下:docker run --name mynginx2 --network my-bridge -p 8080:80 -d nginx:latest
                connect : 将容器加入到指定网络中docker network connect  (--link test2:t2) --alias name my_bridge test2
                create : 创建网络docker network create -d bridge my_bridge
                disconnect : 将容器中网络中移除;
                inspect:查看指定网络的详情;
                ls:列出所有网络docker network ls
                rm:删除指定网络

三、docker容器日期和主机同步

    启动容器docker run时挂载:-e TZ="Asia/Shanghai" (-v /etc/timezone:/etc/timezone) -v /etc/localtime:/etc/localtime

四、Dockerfile使用

  1. FROM centos #制作base image 基础镜像
  2. LABEL version="1.0" #容器元信息,帮助信息
  3. LABEL maintainer="xxx@qq.com"
  4. #尽量使用一条命令,避免无用分层
  5. RUN yum update && yum install -y vim \
  6. Python-dev #反斜杠换行
  7. WORKDIR /root #改变路径尽可能使用绝对路径
  8. WORKDIR test #如果没有会自动创建
  9. RUN pwd
  10. ADD test.tar.gz / #添加到根目录并解压
  11. COPY test.tar.gz / #添加到根目录
  12. EXPOSE 8630 #指定暴露端口
  13. ENV MYSQL_VERSION 5.6 #设置一个mysql常量
  14. ADD ./myspringcloud-auth/target/myspringcloud-auth.jar ./
  15. CMD java -Djava.security.egd=file:/dev/./urandom -jar myspringcloud-auth.jar
  1. #Dockerfile
  2. FROM java # 基础镜像1.8_111 此版本对于java-weixin-pay的jdk有问题
  3. ENTRYPOINT ["java", "-jar", "/common-api-4.2.2.jar"]
  4. FROM openjdk:8-jdk # 基础镜像1.8_132
  5. COPY target/*.jar app.jar
  6. ENV PORT 8890
  7. EXPOSE $PORT
  8. ENTRYPOINT ["java","-Dserver.port=${PORT}","-jar","app.jar"]
  9. #Dockerfile
  10. #Dockerfile
  11. FROM moxm/java:1.8-full
  12. RUN mkdir -p /common-api
  13. WORKDIR /common-api
  14. ARG JAR_FILE=target/*.jar
  15. COPY ${JAR_FILE} app.jar
  16. EXPOSE 8890
  17. ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
  18. CMD sleep 60; java $JAVA_OPTS -jar app.jar
  19. #Dockerfile
  20. # 上面两个Dockerfile中启动命令一个是ENTRYPOINT 一个是 CMD
  21. # 这两个区别在于CMD会覆盖文件中的命令,而ENTRYPOINT是追加
  22. # 用CMD ["ls","-a"] 时如果运行docker时加参数 docker run xxx -l 其结果不是 docker run xxx ls -al
  23. # 而是docker run xxx -l
  24. # 用ENTRYPOINT ["ls","-a"] 时如果运行docker时加参数docker run xxx -l 其结果是docker run xxx ls -al
  1. #Dockerfile
  2. FROM alpine # 基础镜像 基于Musl libc和busybox 最小的docker镜像另外scratch是docker默认的空镜像
  3. RUN apk add --no-cache nodejs npm
  4. COPY app.js /future/
  5. COPY package.json /future/
  6. WORKDIR /future
  7. RUN npm install --registry=https://registry.npm.taobao.org
  8. EXPOSE 8000

 五、构建镜像和上传镜像到dockerhub

      构建镜像:在Dockerfile目录下执行 docker build -t name:0.0.1 .

      上传镜像:

              创建账号

  1. #默认登录dockerhub
  2. docker login
  3. #登录指定服务
  4. docker login --username=xxxx xxx.com
  5. #image名称必须为 仓库名/镜像名称:版本
  6. docker tag name:0.0.1 username/name:0.0.1
  7. #推送本地镜像到dockerhub
  8. docker push username/name:0.0.1
  9. #删除本地镜像验证远程镜像
  10. docker rmi name:0.0.1
  11. docker pull username/name:0.0.1

六、docker-compose使用

      安装

  1. curl -L --fail https://github.com/docker/compose/releases/download/1.27.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
  3. #查看版本
  4. docker-compose version
  5. #卸载
  6. rm /usr/local/bin/docker-compose

      使用

  1. #docker-compose.yml文件
  2. version: '2'
  3. services:
  4. mymysql:
  5. build:
  6. context: ./
  7. dockerfile: ./Dockerfile
  8. environment:
  9. MYSQL_ROOT_PASSWORD: root
  10. TZ=Asia/Shanghai
  11. restart: always
  12. logging: # 设置容器日志大小
  13. driver: "json-file"
  14. options:
  15. max-size: "500m"
  16. container_name: my-mysql
  17. image: mysql
  18. command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 设置utf8字符集
  19. volumes:
  20. - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
  21. - /docker/lnmp/mysql/data:/var/lib/mysql
  22. - /docker/lnmp/mysql/conf.d:/etc/mysql/conf.d
  23. extra_hosts:#添加host到容器
  24. - aa:127.0.0.1
  25. - bb:127.0.0.1
  26. ports:
  27. - 3306:3306
  28. networks:
  29. my_bridge:
  30. aliases:
  31. - mysql
  32. redis:
  33. image: redis:5.0
  34. ports:
  35. - 6379:6379
  36. restart: always
  37. logging: # 设置容器日志大小
  38. driver: "json-file"
  39. options:
  40. max-size: "500m"
  41. container_name: myspringcloud-redis
  42. hostname: myspringcloud-redis
  43. volumes:
  44. - /etc/localtime:/etc/localtime
  45. - ./services/redis/conf/redis.conf:/etc/redis/redis.conf:rw
  46. - ./services/redis/data:/data:rw
  47. command:
  48. # requirepass密码 appendonly持久化 bind绑定ip daemonize守护进程 protected-mode 开启保护模式
  49. redis-server /etc/redis/redis.conf --requirepass redis --appendonly no --bind 0.0.0.0 --daemonize no --protected-mode no --databases 200
  50. networks:
  51. my_bridge:
  52. aliases:
  53. - myspringcloud-redis
  54. # nginx 需要先去掉挂载启动后拷贝出挂载目录下内容,然后挂载启动
  55. nginx:
  56. image: nginx
  57. container_name: nginx
  58. ports:
  59. - 80:80
  60. - 443:443
  61. volumes:
  62. - ./services/nginx/www:/www/:rw
  63. - ./services/nginx/ssl:/ssl:rw
  64. - ./services/nginx/conf.d:/etc/nginx/conf.d/:rw
  65. - ./services/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  66. - ./services/nginx/fastcgi-php.conf:/etc/nginx/fastcgi-php.conf:ro
  67. - ./services/nginx/fastcgi_params:/etc/nginx/fastcgi_params:ro
  68. - ./logs/nginx:/var/log/nginx/:rw
  69. environment:
  70. TZ: Asia/Shanghai
  71. restart: always
  72. logging: # 设置容器日志大小
  73. driver: "json-file"
  74. options:
  75. max-size: "500m"
  76. networks:
  77. my_bridge:
  78. aliases:
  79. - nginx
  80. mysql:
  81. image: mysql:8.0.20
  82. container_name: mysql8
  83. ports:
  84. - 3306:3306
  85. volumes:
  86. - /etc/localtime:/etc/localtime:ro
  87. - ./services/mysql8/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
  88. - ./services/mysql8/data/:/var/lib/mysql/:rw
  89. - ./services/mysql8/initdb/:/docker-entrypoint-initdb.d/:rw
  90. - ./logs/mysql8:/var/log/mysql/:rw
  91. restart: always
  92. logging: # 设置容器日志大小
  93. driver: "json-file"
  94. options:
  95. max-size: "500m"
  96. networks:
  97. - default
  98. environment:
  99. MYSQL_ROOT_PASSWORD: "xxx@123"
  100. TZ: "Asia/Shanghai"
  101. php7:
  102. image: php:7.4.7-fpm-alpine # php:7.4.7-fpm(alpine是基础镜像扩展少)
  103. container_name: php7
  104. ports:
  105. - 9000:9000
  106. volumes:
  107. - /etc/localtime:/etc/localtime:ro
  108. - ./services/nginx/www:/www/:rw
  109. #新版不支持挂载文件先注释启动后拷贝出容器中文件再打开重启
  110. #- ./services/php7/php.ini:/usr/local/etc/php/php.ini:ro
  111. #- ./services/php7/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf:rw
  112. - ./logs/php7:/var/log/php
  113. restart: always
  114. logging: # 设置容器日志大小
  115. driver: "json-file"
  116. options:
  117. max-size: "500m"
  118. networks:
  119. my_bridge:
  120. aliases:
  121. - php7
  122. nodepm2:
  123. image: nodepm2:latest
  124. container_name: nodepm2
  125. restart: always
  126. ports:
  127. - 3000:3000
  128. logging:
  129. driver: "json-file"
  130. options:
  131. max-size: "500m"
  132. volumes:
  133. - /etc/localtime:/etc/localtime
  134. - ./services/node-pm2/code:/service/code:rw
  135. networks:
  136. my_bridge:
  137. aliases:
  138. - nodepm2
  139. nps:
  140. image: ffdfgdfg/nps
  141. container_name: nps
  142. network_mode: "host"
  143. volumes:
  144. - /etc/localtime:/etc/localtime:ro
  145. - ./services/nps/conf:/conf:rw
  146. restart: always
  147. logging:
  148. driver: "json-file"
  149. options:
  150. max-size: "500m"
  151. npc:
  152. image: ffdfgdfg/npc
  153. container_name: npc
  154. network_mode: "host"
  155. volumes:
  156. - /etc/localtime:/etc/localtime:ro
  157. - ./services/npc/conf:/conf:rw
  158. restart: always
  159. logging:
  160. driver: "json-file"
  161. options:
  162. max-size: "500m"
  163. environment:
  164. TZ: "Asia/Shanghai"
  165. mongo:
  166. image: mongo:5.0.2
  167. container_name: mongo
  168. restart: always
  169. ports:
  170. - 27017:27017
  171. logging:
  172. driver: "json-file"
  173. options:
  174. max-size: "500m"
  175. volumes:
  176. - /etc/localtime:/etc/localtime:ro
  177. - ./services/mongo/data:/data/db:rw
  178. - ./logs/mongo:/var/log/mongodb:rw
  179. networks:
  180. my_bridge:
  181. aliases:
  182. - mongo
  183. environment:
  184. MONGO_INITDB_ROOT_USERNAME: root
  185. MONGO_INITDB_ROOT_PASSWORD: Haite@1234
  186. elasticsearch:
  187. image: elasticsearch:7.3.0
  188. container_name: elasticsearch
  189. restart: always
  190. ports:
  191. - "9200:9200"
  192. - "9300:9300"
  193. logging:
  194. driver: "json-file"
  195. options:
  196. max-size: "500m"
  197. volumes:
  198. - /etc/localtime:/etc/localtime:ro
  199. - ./services/es7/data:/usr/share/es7/data:rw
  200. - ./logs/es7:/usr/share/es7/logs:rw
  201. - ./services/es7/config/ik:/usr/share/elasticsearch/plugins/ik
  202. networks:
  203. my_bridge:
  204. aliases:
  205. - elasticsearch
  206. environment:
  207. cluster.name: elasticsearch
  208. discovery.type: single-node
  209. ulimits:
  210. nofile:
  211. soft: 65535
  212. hard: 65535
  213. kibana:
  214. image: docker.elastic.co/kibana/kibana:7.3.0
  215. container_name: kibana
  216. restart: always
  217. ports:
  218. - 5601:5601
  219. logging:
  220. driver: "json-file"
  221. options:
  222. max-size: "500m"
  223. volumes:
  224. - /etc/localtime:/etc/localtime:ro
  225. networks:
  226. my_bridge:
  227. aliases:
  228. - kibana
  229. depends_on: ['elasticsearch']
  230. logstash:
  231. image: logstash:7.3.0
  232. container_name: logstash
  233. restart: always
  234. ports:
  235. - 4560:4560
  236. logging:
  237. driver: "json-file"
  238. options:
  239. max-size: "500m"
  240. volumes:
  241. - /etc/localtime:/etc/localtime:ro
  242. - ./services/logstash/config/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf:rw
  243. networks:
  244. my_bridge:
  245. aliases:
  246. - kibana
  247. depends_on: ['elasticsearch']
  248. # rocket mq name server
  249. rocketmqserver:
  250. image: foxiswho/rocketmq:server-4.7.0
  251. container_name: rocket-server
  252. restart: always
  253. ports:
  254. - 9876:9876
  255. logging:
  256. driver: "json-file"
  257. options:
  258. max-size: "500m"
  259. volumes:
  260. - /etc/localtime:/etc/localtime:ro
  261. - ./logs/rmq/server:/opt/logs
  262. - ./services/rmq/server/store:/opt/rmqstore
  263. networks:
  264. my_bridge:
  265. aliases:
  266. - rocketmqserver
  267. environment:
  268. JAVA_OPT_EXT: "-server -Xms64m -Xmx64m -Xmn64m"
  269. # rocket mq broker
  270. rmqbroker:
  271. image: foxiswho/rocketmq:broker-4.7.0
  272. container_name: rocket-broker
  273. restart: always
  274. ports:
  275. - 10909:10909
  276. - 10911:10911
  277. ports:
  278. - 10909:10909
  279. - 10911:10911
  280. logging:
  281. driver: "json-file"
  282. options:
  283. max-size: "500m"
  284. volumes:
  285. - /etc/localtime:/etc/localtime:ro
  286. - ./logs/rmq/broker/logs:/opt/logs
  287. - ./services/rmq/broker/store:/opt/rmqstore
  288. - ./services/rmq/config/broker.conf:/etc/rocketmq/broker.conf
  289. networks:
  290. my_bridge:
  291. aliases:
  292. - rmqbroker
  293. environment:
  294. - NAMESRV_ADDR=rocketmqserver:9876
  295. - JAVA_OPTS:=-Duser.home=/opt
  296. - JAVA_OPT_EXT=-server -Xms64m -Xmx64m -Xmn64m
  297. command: mqbroker -c /etc/rocketmq/broker.conf
  298. depends_on:
  299. - rocketmqserver
  300. # rocket console 这个可以不需要
  301. rmqconsole:
  302. image: styletang/rocketmq-console-ng:latest
  303. container_name: rocket-console
  304. restart: always
  305. ports:
  306. - 8180:8180
  307. logging:
  308. driver: "json-file"
  309. options:
  310. max-size: "500m"
  311. volumes:
  312. - /etc/localtime:/etc/localtime:ro
  313. networks:
  314. my_bridge:
  315. aliases:
  316. - rmqconsole
  317. environment:
  318. - JAVA_OPTS=-Drocketmq.config.namesrvAddr=rocketmqserver:9876 -Dserver.port=8180 -Drocketmq.config.isVIPChannel=false
  319. - JAVA_OPT_EXT=-Xms128m -Xmx128m -Xmn128m
  320. depends_on:
  321. - rocketmqserver
  322. # xxl-job 分布式调度中心
  323. xxl-job:
  324. image: xuxueli/xxl-job-admin:2.3.0
  325. container_name: xxl-job
  326. restart: always
  327. ports:
  328. - 9001:9001
  329. logging:
  330. driver: "json-file"
  331. options:
  332. max-size: "500m"
  333. volumes:
  334. - /etc/localtime:/etc/localtime:ro
  335. - ./services/xxl-job/data:/data/applogs
  336. networks:
  337. my_bridge:
  338. aliases:
  339. - xxljob
  340. environment:
  341. - PARAMS=--spring.datasource.url=jdbc:mysql://mysql8:3306/lipinshop?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=lipinshop --spring.datasource.password=lipinshop --server.port=9001
  342. depends_on:
  343. - mysql8
  344. # word转pdf模板服务
  345. libreoffice:
  346. image: my/libreoffice:7.4.2
  347. container_name: libreoffice
  348. restart: always
  349. ports:
  350. - 8100:8100
  351. logging:
  352. driver: "json-file"
  353. options:
  354. max-size: "500m"
  355. volumes:
  356. - /etc/localtime:/etc/localtime
  357. - /docker-services/logs/libreoffice:/logs/:rw
  358. environment:
  359. TZ: Asia/Shanghai
  360. command:
  361. /opt/libreoffice7.4/program/soffice --headless --accept="socket,host=0.0.0.0,port=8100;urp;" --nofirststartwizard &
  362. networks:
  363. my_bridge:
  364. aliases:
  365. - libreoffice
  366. # RabbitMQ,集群方式参考:https://github.com/oprearocks/RabbitMQ-Docker-cluster
  367. rabbit:
  368. image: rabbitmq:management
  369. container_name: rabbit
  370. hostname: rabbit
  371. environment:
  372. TZ: "Asia/Shanghai"
  373. RABBITMQ_ERLANG_COOKIE: myrabbitmq
  374. RABBITMQ_NODENAME: rabbit
  375. volumes:
  376. - /etc/localtime:/etc/localtime
  377. - ./services/rabbitmq/plugins.erl:/etc/rabbitmq/enabled_plugins
  378. - ./services/rabbitmq/data:/var/lib/rabbitmq
  379. ports:
  380. - 4369:4369
  381. - 5671:5671
  382. - 5672:5672
  383. - 15670:15670
  384. - 15671:15671
  385. - 15672:15672
  386. - 15674:15674
  387. - 15675:15675
  388. - 25672:25672
  389. - 1883:1883
  390. - 61613:61613
  391. restart: always
  392. logging:
  393. driver: "json-file"
  394. options:
  395. max-size: "500m"
  396. networks:
  397. my_bridge:
  398. aliases:
  399. - rabbit
  400. # ./services/rabbitmq/plugins.erl:[rabbitmq_management, rabbitmq_management_agent, rabbitmq_mqtt, rabbitmq_web_mqtt, rabbitmq_stomp, rabbitmq_web_stomp, rabbitmq_web_stomp_examples].
  401. # docker cp rabbitmq_delayed_message_exchange-3.9.0.ez rabbit:/plugins->修改plugins.erl添加rabbitmq_delayed_message_exchange->重启容器
  402. # mq集群https://github.com/oprearocks/RabbitMQ-Docker-cluster/blob/master/docker-compose.yml
  403. # minio start
  404. # 单机minio
  405. minIO:
  406. image: minio/minio
  407. container_name: minIO
  408. # privileged: true 逃逸模式存在安全隐患必要时才用
  409. ports:
  410. - 9000:9000
  411. - 9001:9001
  412. volumes:
  413. - /etc/localtime:/etc/localtime
  414. - ./services/minio/config:/root/.minio:rw
  415. - ./services/minio/data/data1:/data1:rw
  416. - ./services/minio/data/data2:/data2:rw
  417. - ./services/minio/data/data3:/data3:rw
  418. - ./services/minio/data/data4:/data4:rw
  419. restart: always
  420. logging:
  421. driver: "json-file"
  422. options:
  423. max-size: "500m"
  424. command: server --console-address ":9001" --address ":9000" http://minio/data{1...4}
  425. networks:
  426. my_bridge:
  427. aliases:
  428. - minio
  429. environment:
  430. TZ: "Asia/Shanghai"
  431. MINIO_ACCESS_KEY: admin
  432. MINIO_SECRET_KEY: minioadmin
  433. healthcheck:
  434. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  435. interval: 30s
  436. timeout: 20s
  437. retries: 3
  438. # 所有容器通用的设置和配置
  439. x-minio-common: &minio-common
  440. image: minio/minio
  441. command: server --console-address ":9001" http://minio{1...4}/data
  442. expose:
  443. - "9000"
  444. # environment:
  445. # MINIO_ROOT_USER: minioadmin
  446. # MINIO_ROOT_PASSWORD: minioadmin
  447. healthcheck:
  448. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  449. interval: 30s
  450. timeout: 20s
  451. retries: 3
  452. # 启动4个docker容器运行minio服务器实例 https://www.jianshu.com/p/aade99d924a2
  453. # 使用nginx反向代理9000端口,负载均衡, 你可以通过9001、9002、9003、9004端口访问它们的web console
  454. services:
  455. minio1:
  456. <<: *minio-common
  457. hostname: minio1
  458. ports:
  459. - "9001:9001"
  460. volumes:
  461. - ./data/data1:/data
  462. # minio2 3 4
  463. # minio end
  464. networks:
  465. my_bridge:
  466. #external: true使用创建好的网络
  467. driver: bridge
  468. #Dockerfile
  469. FROM mysql:8.0.20
  470. MAINTAINER xxx
  471. ENV TZ=Asia/Shanghai
  472. RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  473. COPY ./xxx.sql /docker-entrypoint-initdb.d
  474. #Dockerfile END
  475. #libreoffice Dockerfile
  476. FROM centos:7
  477. WORKDIR /home
  478. #以下设置中文语言环境与修改时区
  479. ENV LANG=zh_CN.UTF-8 \
  480. LANGUAGE=zh_CN:zh \
  481. LC_ALL=zh_CN.UTF-8
  482. #加入windows字体包
  483. ADD fonts.tar.gz /usr/share/fonts/
  484. #将下载好的包解压到相应文件下
  485. ADD LibreOffice_7.4.2.3_Linux_x86-64_rpm.tar.gz /home/
  486. ADD LibreOffice_7.4.2.3_Linux_x86-64_rpm_langpack_zh-CN.tar.gz /usr/
  487. RUN yum update -y && \
  488. yum reinstall -y glibc-common && \
  489. yum install -y telnet net-tools && \
  490. yum clean all && \
  491. rm -rf /tmp/* && rm -rf /var/cache/yum/* && \
  492. localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
  493. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  494. yum localinstall /home/LibreOffice_7.4.2.3_Linux_x86-64_rpm/RPMS/*.rpm -y && \
  495. yum localinstall /usr/LibreOffice_7.4.2.3_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm -y && \
  496. yum install ibus -y && \
  497. #加入中文字体支持并赋权限
  498. chmod -R 755 /usr/share/fonts && \
  499. yum install mkfontscale -y && \
  500. mkfontscale && \
  501. yum install fontconfig -y && \
  502. mkfontdir && \
  503. fc-cache -fv && \
  504. #清理缓存,减少镜像大小
  505. yum clean all && rm -rf /home/LibreOffice_7.4.2.3_Linux_x86-64_rpm && rm -rf /usr/LibreOffice_7.4.2.3_Linux_x86-64_rpm_langpack_zh-CN
  506. #暴露端口
  507. EXPOSE 8100
  508. #运行
  509. RUN /opt/libreoffice7.4/program/soffice -headless -accept="socket,host=0.0.0.0,port=8100;urp;" -nofirststartwizard &
  510. CMD ["bash"]
  511. #libreoffice Dockerfile END
  512. #/etc/nginx/nginx.conf
  513. user nginx;
  514. worker_processes 1;
  515. pid /var/run/nginx.pid;
  516. error_log /var/log/nginx/nginx.error.log warn;
  517. events {
  518. worker_connections 1024;
  519. }
  520. http {
  521. include /etc/nginx/mime.types;
  522. default_type application/octet-stream;
  523. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  524. '$status $body_bytes_sent "$http_referer" '
  525. '"$http_user_agent" "$http_x_forwarded_for"';
  526. access_log /dev/null;
  527. #access_log /var/log/dnmp/nginx.access.log main;
  528. # hide verson string
  529. server_tokens off;
  530. sendfile on;
  531. tcp_nopush on;
  532. client_header_buffer_size 512k;
  533. large_client_header_buffers 4 512k;
  534. client_max_body_size 100M;
  535. keepalive_timeout 65;
  536. #gzip on;
  537. fastcgi_connect_timeout 300;
  538. fastcgi_send_timeout 300;
  539. fastcgi_read_timeout 300;
  540. fastcgi_buffer_size 64k;
  541. fastcgi_buffers 4 64k;
  542. fastcgi_busy_buffers_size 128k;
  543. fastcgi_temp_file_write_size 128k;
  544. gzip on;
  545. gzip_min_length 1k;
  546. gzip_buffers 4 16k;
  547. gzip_http_version 1.0;
  548. gzip_comp_level 2;
  549. gzip_types text/plain application/x-javascript text/css application/xml;
  550. gzip_vary off;
  551. include /etc/nginx/conf.d/*.conf;
  552. }
  553. #/etc/nginx/nginx.conf END
  554. #/etc/nginx/fastcgi-php.conf
  555. # regex to split $uri to $fastcgi_script_name and $fastcgi_path
  556. fastcgi_split_path_info ^(.+\.php)(/.+)$;
  557. # Check that the PHP script exists before passing it
  558. try_files $fastcgi_script_name =404;
  559. # Bypass the fact that try_files resets $fastcgi_path_info
  560. # see: http://trac.nginx.org/nginx/ticket/321
  561. set $path_info $fastcgi_path_info;
  562. #fastcgi_param PATH_INFO $path_info;
  563. fastcgi_read_timeout 3600;
  564. fastcgi_index index.php;
  565. #/etc/nginx/fastcgi-php.conf END
  566. #/etc/nginx/fastcgi_params
  567. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  568. fastcgi_param QUERY_STRING $query_string;
  569. fastcgi_param REQUEST_METHOD $request_method;
  570. fastcgi_param CONTENT_TYPE $content_type;
  571. fastcgi_param CONTENT_LENGTH $content_length;
  572. fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  573. fastcgi_param REQUEST_URI $request_uri;
  574. fastcgi_param DOCUMENT_URI $document_uri;
  575. fastcgi_param DOCUMENT_ROOT $document_root;
  576. fastcgi_param SERVER_PROTOCOL $server_protocol;
  577. fastcgi_param REQUEST_SCHEME $scheme;
  578. fastcgi_param HTTPS $https if_not_empty;
  579. fastcgi_param GATEWAY_INTERFACE CGI/1.1;
  580. fastcgi_param SERVER_SOFTWARE nginx;
  581. fastcgi_param REMOTE_ADDR $remote_addr;
  582. fastcgi_param REMOTE_PORT $remote_port;
  583. fastcgi_param SERVER_ADDR $server_addr;
  584. fastcgi_param SERVER_PORT $server_port;
  585. fastcgi_param SERVER_NAME $server_name;
  586. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  587. fastcgi_param REDIRECT_STATUS 200;
  588. #/etc/nginx/fastcgi_params END
  589. #/etc/nginx/conf.d/**.conf
  590. server {
  591. listen 80 default;
  592. server_name localhost;
  593. root /www/blog;
  594. index index.php index.html index.htm;
  595. #charset koi8-r;
  596. #access_log /dev/null;
  597. access_log /var/log/nginx/nginx.blog.access.log main;
  598. error_log /var/log/nginx/nginx.blog.error.log warn;
  599. # 解决跨域问题
  600. #location / {
  601. # add_header Access-Control-Allow-Origin '*';
  602. # add_header Access-Control-Allow-Methods 'GET, POST, PATCH, PUT, OPTIONS, DELETE';
  603. # add_header Access-Control-Expose-Headers '*';
  604. # add_header Access-Control-Allow-Headers 'Origin, Content-Type, Cookie,X-CSRF-TOKEN,Accept,Authorization,sign,timestamps,ticket,token-platform,x-requested-with,usertoken,userkey';#自定义的也要配置上
  605. # if ($request_method = 'OPTIONS') {
  606. # return 200;
  607. #}
  608. # 解决跨域问题
  609. #error_page 404 /404.html;
  610. # redirect server error pages to the static page /50x.html
  611. #
  612. error_page 500 502 503 504 /50x.html;
  613. location = /50x.html {
  614. root /usr/share/nginx/html;
  615. }
  616. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  617. #
  618. #location ~ \.php$ {
  619. # proxy_pass http://127.0.0.1;
  620. #}
  621. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  622. #
  623. location ~ \.php$ {
  624. fastcgi_pass php7:9000;
  625. include fastcgi-php.conf;
  626. include fastcgi_params;
  627. }
  628. # deny access to .htaccess files, if Apache's document root
  629. # concurs with nginx's one
  630. #
  631. location ~ /\.ht {
  632. deny all;
  633. }
  634. }
  635. server {
  636. listen 443 default ssl http2;
  637. server_name localhost;
  638. root /www/blog;
  639. index index.php index.html index.htm;
  640. #charset koi8-r;
  641. #access_log /dev/null;
  642. access_log /var/log/nginx/nginx.blog.access.log main;
  643. error_log /var/log/nginx/nginx.blog.error.log warn;
  644. #error_page 404 /404.html;
  645. ssl_certificate /ssl/localhost/localhost.crt;
  646. ssl_certificate_key /ssl/localhost/localhost.key;
  647. # redirect server error pages to the static page /50x.html
  648. #
  649. error_page 500 502 503 504 /50x.html;
  650. location = /50x.html {
  651. root /usr/share/nginx/html;
  652. }
  653. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  654. #
  655. #location ~ \.php$ {
  656. # proxy_pass http://127.0.0.1;
  657. #}
  658. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  659. #
  660. location ~ \.php$ {
  661. fastcgi_pass php7:9000;
  662. include fastcgi-php.conf;
  663. include fastcgi_params;
  664. }
  665. # deny access to .htaccess files, if Apache's document root
  666. # concurs with nginx's one
  667. #
  668. location ~ /\.ht {
  669. deny all;
  670. }
  671. }
  672. #/etc/nginx/conf.d/**.conf END
  673. #/etc/mysql/conf.d/mysql.cnf
  674. [client]
  675. port = 3306
  676. default-character-set = utf8mb4
  677. [mysqld]
  678. user = mysql
  679. port = 3306
  680. sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  681. default-storage-engine = InnoDB
  682. default-authentication-plugin = mysql_native_password
  683. character-set-server = utf8mb4
  684. collation-server = utf8mb4_unicode_ci
  685. init_connect = 'SET NAMES utf8mb4'
  686. disable-log-bin
  687. skip-character-set-client-handshake
  688. explicit_defaults_for_timestamp
  689. slow_query_log
  690. long_query_time = 3
  691. slow-query-log-file = /var/lib/mysql/mysql.slow.log
  692. log-error = /var/lib/mysql/mysql.error.log
  693. default-time-zone = '+8:00'
  694. [mysql]
  695. default-character-set = utf8mb4
  696. #/etc/mysql/conf.d/mysql.cnf END

      使用docker-compose构建自定义应用

  1. #首先创建一个用于打包的maven容器
  2. 创建目录mavendata
  3. mavendata下放Dockerfile、maven仓库目录repository和settings.xml文件
  4. 构建maven镜像:docker build -t my/maven .
  5. 构建maven镜像-镜像内clone:docker build -t my/mavenbuild .
  6. 使用自定义maven镜像打包$(pwd)当前路径下的代码
  7. docker run -it --rm -v "$(pwd)":/app -w /app -v /data/mavendata/repository:/usr/share/maven/ref/repository my/maven mvn clean package -DskipTests=true
  8. 打包成功后会在$(pwd)目录下生成打包文件
  9. 使用docker-compose部署的脚本
  10. #!/bin/sh
  11. echo "start..."
  12. cd /code
  13. rm -rf xxx
  14. # echo "----------clone code 主机clone----------"
  15. # git clone -b develop git@xxx.git
  16. echo "----------clone code 镜像内clone----------"
  17. docker run -it --rm -v "$(pwd)":/app -w /app -v /root/.ssh:/root/.ssh my/mavenbuild git clone -b master ssh://git@npc.bonrui.com:8012/weifangzdsys-group/weifangzdsys.git
  18. cd xxx
  19. echo "----------maven build----------"
  20. docker run -it --rm -v "$(pwd)":/app -w /app -v /data/mavendata/repository:/usr/share/maven/ref/repository my/maven mvn clean package -DskipTests=true
  21. mkdir /code/xxx/xxx/target/docker
  22. cp /code/Dockerfile /xxx/xxx/target/docker
  23. cp /code/xxx/xxx/target/xxx.jar /xxx/xxx/target/docker/xxx.jar
  24. echo "----------deploy----------"
  25. cd /data/docker-services
  26. docker-compose stop xxx
  27. docker-compose rm -f xxx
  28. docker rmi bonrui/xxx:2.0.0
  29. docker-compose build xxx
  30. docker-compose up -d xxx
  31. docker-compose logs xxx
  32. echo "end"
  33. exit
  34. Dockerfile文件内容 my/maven:
  35. FROM maven:3-jdk-8-alpine
  36. COPY settings.xml /usr/share/maven/ref/
  37. Dockerfile文件内容 my/mavenbuild:
  38. FROM maven:3-jdk-8-alpine
  39. RUN apk --no-cache add openssh-client git # 镜像内clone
  40. COPY settings.xml /usr/share/maven/conf/
  41. #!/bin/sh
  42. echo "m start..."
  43. cd /data/docker-services/services/xxx/code/xxx
  44. echo "----------clone code(m)----------"
  45. # docker run -it --rm -v "$(pwd)":/app -w /app -v /root/.ssh:/root/.ssh my/node14build git clone -b main ssh://git@xxx.git
  46. docker run -it --rm -v "$(pwd)":/app -w /app -v /root/.ssh:/root/.ssh my/node14build git pull
  47. echo "----------node build(m)----------"
  48. docker run -it --rm -v "$(pwd)":/app -w /app my/node14build npm install --registry https://registry.npm.taobao.org
  49. docker run -it --rm -v "$(pwd)":/app -w /app my/node14build npm run build
  50. echo "----------deploy(m)----------"
  51. if [ $? -eq 0 ]; then
  52. rm -rf ./distbak
  53. mkdir ./distbak
  54. cp -r /data/docker-services/services/nginx/www/m/* ./distbak
  55. rm -rf /data/docker-services/services/nginx/www/m/*
  56. cp -r ./dist/* /data/docker-services/services/nginx/www/m
  57. ls /data/docker-services/services/nginx/www/m
  58. else
  59. echo "-----------failed(m)-------------"
  60. fi
  61. echo "end(m)"
  62. exit
  63. Dockerfile文件内容 my/node14build:
  64. FROM node:14.16.1-alpine
  65. RUN apk --no-cache add openssh-client git
  66. settings文件内容:
  67. <?xml version="1.0" encoding="UTF-8"?>
  68. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  69. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  70. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  71. <localRepository>/usr/share/maven/ref/repository</localRepository>
  72. <mirrors>
  73. <mirror>
  74. <id>alimaven</id>
  75. <name>aliyun maven</name>
  76. <url>https://maven.aliyun.com/repository/public</url>
  77. <mirrorOf>*</mirrorOf>
  78. </mirror>
  79. </mirrors>
  80. </settings>
  81. # docker-compose.yml
  82. version: "3"
  83. services:
  84. xxx:
  85. # 包含Dockefile的主机目录,注意Dockerfile中的文件路径是基于这个路径的
  86. build: /data/docker-services/services/hairbiz/code/xxxapi/xxx/target/docker
  87. #context: /data/docker-services/services/xxx/code
  88. #dockerfile: /data/docker-services/services/xxx/code/Dockerfile
  89. image: xxx/xxx:2.0.0
  90. container_name: xxx
  91. restart: always
  92. ports:
  93. - 9999:9999
  94. logging:
  95. driver: "json-file"
  96. options:
  97. max-size: "500m"
  98. volumes:
  99. - /etc/localtime:/etc/localtime
  100. - ./logs/xxx:/logs/:rw
  101. environment:
  102. spring.profiles.active: dev
  103. TZ=Asia/Shanghai
  104. networks:
  105. my_bridge:
  106. aliases:
  107. - xxx
  108. networks:
  109. my_bridge:
  110. driver: bridge
  111. # Dockerfile
  112. FROM java
  113. # 这个路径是基于上面的路径的
  114. ADD /hair-biz.jar //
  115. ENTRYPOINT ["java", "-jar", "/xxx.jar"]

      命令

  1. #构建在docker-compose.yml目录下执行
  2. docker-compose build
  3. #启动服务 -d后台运行
  4. docker-compose up -d
  5. #停止服务--rmi删除镜像 -v删除已经在compose文件中定义的和匿名的附在容器上的数据卷
  6. docker-compose down --rmi all -v
  7. #查看日志
  8. docker-compose logs -f --tail 100
  9. #列出项目中所有的容器
  10. docker-compose ps
  11. #停止正在运行的容器,可以通过docker-compose start 再次启动
  12. docker-compose stop
  13. #启动已经存在的服务容器
  14. docker-compose start
  15. #拉取服务依赖的镜像
  16. docker-compose pull
  17. #重启项目中的服务
  18. docker-compose restart
  19. #删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器–f, –force强制直接删除,包括非停止状态的容器 -v删除容器所挂载的数据卷
  20. docker-compose rm
  21. #在指定容器上执行一个ping命令。
  22. docker-compose run ubuntu ping www.baidu.com
  23. #设置指定服务运行的容器个数。通过service=num的参数来设置数量
  24. docker-compose scale web=3 db=2
  25. #暂停一个服务容器
  26. docker-compose pause [SERVICE...]
  27. #恢复处于暂停状态中的服务
  28. docker-compose unpause [SERVICE...]
  29. #通过发送SIGKILL信号来强制停止服务容器。支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
  30. docker-compose kill -s SIGINT
  31. #验证并查看compose文件配置–resolve-image-digests 将镜像标签标记为摘要-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息–services 打印服务名,一行一个–volumes 打印数据卷名,一行一个
  32. docker-compose config [options]
  33. #推送服务依的镜像–ignore-push-failures 忽略推送镜像过程中的错误
  34. docker-compose push [options] [SERVICE...]
  35. #显示某个容器端口所映射的公共端口–protocol=proto,指定端口协议,TCP(默认值)或者UDP –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
  36. docker-compose port [options] SERVICE PRIVATE_PORT
  37. #-d 分离模式,后台运行命令–privileged 获取特权–user USER 指定运行的用户-T 禁用分配TTY,默认docker-compose exec分配TTY–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
  38. docker-compose exec [options] SERVICE COMMAND [ARGS...]

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号