DockerFile和DockerCompose使用总结
DockerFile
基本結構
# 1、第一行必須是 FROM 基礎鏡像信息 FROM ubuntu# 2、維護者信息 MAINTAINER docker_user docker_user@email.com# 3、鏡像操作指令 RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list RUN apt-get update && apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf# 4、容器啟動執行指令 CMD /usr/sbin/nginxDockerfile 基本就長這樣,當然這是一個很簡單的例子,還有很多其他命令會在下個小節介紹。
有幾點需要注意,第一行必須是 FROM 命令,表示是基于哪個基礎鏡像來創建鏡像的。第二行一般是 MAINTAINER 命令,表示維護人信息,但不做硬性要求。最后一行是 CMD 命令,表示啟動容器執行的命令,CMD 命令必須在最后一行,如果有多個 CMD 命令,則只有最后一個生效。
常用指令
FROM: 必須是 Dockerfile 的首個命令,定義了使用哪個基礎鏡像啟動構建流程。
MAINTAINER: 聲明鏡像作者。
COPY: 將宿主機的文件拷貝到鏡像內的指定路徑。
ADD: 作用類似于 COPY。
COPY 和 ADD 的區別是:ADD 命令功能更多,比如拷貝一個壓縮包,ADD 可以將壓縮包解壓到鏡像內,如果是下載鏈接,ADD 會先下載文件,然后再拷貝。
但現在 docker 官方更推薦使用 COPY 命令,一個命令只做一件事。
WORKDIR: 指定 Dockerfile 中該命令下的操作所在的工作目錄。
RUN: 執行命令行命令。
ENV: 設置環境變量。
VOLUME: 掛載數據卷。
EXPOSE: 暴露端口。
CMD: 服務啟動命令。
創建鏡像
有了 Dockerfile 之后,在 Dockerfile 所在目錄執行命令:
# docker build -t <image_name> .就這么簡單,鏡像就創建好了。
DockerCompose
使用 docker-compose 部署 Redis 服務
項目 Docker 化部署的最后一步,就差 Redis 了。本來以為是一件很簡單的事,沒想到折騰了我大半天的時間,下面就來分享分享我的采坑經歷。
docker-compose 文件:
version: '3'services:redis:image: redis:3.2.12container_name: redisrestart: alwaysnetwork_mode: hostcommand: redis-server /etc/redis.confports:- 6379:6379volumes:- /data:/data- ./redis.conf:/etc/redis.conf當前目錄下執行:
# docker-compose up本來以為服務一啟,事情就這么愉快的結束了,但是,報錯。
Can’t open the log file: No such file or directory
原因就是 redis.conf 文件直接用的是在物理機上部署時用的,logfile 參數配的是 /var/lib/redis,但 docker 容器里沒有這個目錄,但是有 /data 目錄,所以,把 logfile 配置成 /data 即可。
改完之后再一啟,沒有任何信息輸出,看來是成功了。
docker ps 看看,沒有容器。
這下給我整懵了,咋回事呢?其實報錯都不怕,就怕啟動不成功,還沒有報錯信息。
就這個問題給我折騰了好久,突然靈光一閃,想到 redis 會不會是以后臺進程起的,導致容器直接退出。
檢查一下配置文件中的 daemonize 參數,果然是 yes。改成 no 之后,就可以正常啟動了。
就這么個破問題,卡了這么長時間,而且這類問題之前還遇到過,真是讓人郁悶。
至此,項目中的所有服務就都 Docker 化部署了。
總結
以上是生活随笔為你收集整理的DockerFile和DockerCompose使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker部署配置相关使用总结
- 下一篇: kubernetes(k8s)之yaml