参考:
https://www.cnblogs.com/me115/p/5539047.html
https://docker_practice.gitee.io/image/pull.html
说明:
Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用 systemd
去启动后台服务,容器内没有后台服务的概念。像systemctl
命令,service命令等都是以后台守护进程形式启动,运行。Docker不是这样。
一. Docker 指令介绍
1. COPY
COPY package.json /usr/src/app/
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径>
可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR
指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
2. ADD
同COPY功能类型,多了一种自动解压缩的功能。
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
3. ENV 设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ENV VERSION=1.0 DEBUG=on \
NAME="Happy Feet"
\ 换行 含有空格的值用双引号括起来
而且后面行可以用前面定义的环境变量 $VERSION 这样
4. EXPOSE
EXPOSE
指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
5. WORKDIR
使用 WORKDIR
指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR
会帮你建立目录。
6. HEALTHCHECK
在没有 HEALTHCHECK
指令前,Docker 引擎只可以通过容器内主进程是否退出来判断容器是否状态异常。很多情况下这没问题,但是如果程序进入死锁状态,或者死循环状态,应用进程并不退出,但是该容器已经无法提供服务了。在 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。
而自 1.12 之后,Docker 提供了 HEALTHCHECK
指令,通过该指令指定一行命令,用这行命令来判断容器主进程的服务状态是否还正常,从而比较真实的反应容器实际状态。
FROM nginx
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
HEALTHCHECK --interval=5s --timeout=3s \
CMD curl -fs http://localhost/ || exit 1
二、常用指令
Docker启动,关闭 命令
启动 systemctl start docker
守护进程重启 sudo systemctl daemon-reload
重启docker服务 systemctl restart docker
重启docker服务 sudo service docker restart
关闭docker service docker stop
关闭docker systemctl stop docker
镜像相关命令
在仓库中查找某镜像:docker search 镜像名
拉取镜像:docker pull 镜像名
启动某个镜像:docker run -p 宿主端口:映射端口 -d image_name:tag 自定义镜像名
删除镜像: docker rmi 镜像id
docker image rm 镜像id/镜像名称
docker image rm $(docker image ls -q redis) -- 删除所有仓库名为 redis 的镜像
删除容器: docker rm 容器id
创建一个数据卷
docker volume create my-vol
查看所有的 数据卷
docker volume ls
清理无用的镜像,容器或者数据卷
$ docker images/container/volume prune
查看日志
docker logs -f 容器ID/容器名
docker container logs [container ID or NAMES]
docker system df 查看镜像、容器、数据卷所占用的空间。
由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也
被称为 虚悬镜像(dangling image)
docker部署springboot项目
1.先把文件和dockfile文件拷贝过去
2.docker build -t 项目名(自定义镜像名) .
3.docker run -d -p 9000:9000 项目名
-d 后台运行
-p 9000:9000 将docker容器的9000端口映射到服务器上的9000端口