Docker:基础
Docker中涉及的基本概念
镜像(images):由一系列文件组成。是一个静态的概念。
容器(container):一个封闭的独立的运行环境。是一个动态的概念。
镜像和容器的区别可以类比为系统安装中的ISO文件和操作系统的区别。
ISO文件是一个静态的东西,我们可以通过ISO去安装一个操作系统,一个运行的操作系统可以理解为是一个容器。
Docker的安装
curl -sSL https://get.daocloud.io/docker | sh
此方法需要安装好curl
Docker常用命令
拉取镜像
docker pull name:tag
查看本地镜像
docker images
查看本地容器
查看正在运行的容器
docker ps
查看所有创建过但没有被删除的容器
docker ps -a
删除一个镜像
docker rmi (name:tag 或 镜像ID)
删除一个容器
docker rm 容器ID
启动一个容器
方法1:以交互方式启动于前台
docker run -it name:tag
常用参数:
--name 为容器指定一个名字
-p 为容器指定容器内部对本机的端口映射
-v 为容器指定容器内部对本机的路径映射
例:
docker run -d -p 80:80 -v /data/dist/:/usr/share/nginx/html nginx:latest
此时可以通过Ctrl+P+Q使容器置于后台运行
如果想要使容器再次返回前台,使用命令
docker attach 容器ID
方法2:以守护进程的方式在后台运行
docker run -it -d name:tag
进入某个容器
docker exec -it 容器ID /bin/bash
将某个容器保存成镜像
docker commit 容器ID name:tag
停止一个容器
docker stop 容器ID
重启已被停止的某个容器
docker start 容器ID
重启一个正在运行的的容器
docker restart 容器ID
将宿主机中的文件传入容器内
docker cp /home/file.txt 容器ID:/home/
修改镜像名称
docker tag name:tag new_name:new_tag
查看容器日志
docker logs 容器ID
打包镜像
docker save -o image.tar name:tag
加载打包好的镜像
docker load -i image.tar
将某个容器的文件系统打包
该命令仅适用于当一个镜像经过多次commit后删除了一部分旧文件但镜像大小没有缩小需要压缩镜像大小的情况
docker export -o image.tar 容器ID
从文件系统归档文件创建镜像
docker import image.tar name:tag
DockerFile的使用
DockerFile说明
DockerFile:是镜像的描述文件,描述了我们的镜像是怎么一步步构成的
使用build命令可以轻松的通过编写好的DockerFile来构建我们自己的docker镜像
例:使用/home/project目录下的DockerFile文件来构建镜像
docker build -t name:tag /home/project/
DockerFile中常见的关键字
- FROM: 所制作镜像的基础镜像
- MAINTAINER: 定义作者
- ADD: 拷贝文件并解压
- COPY: 仅拷贝
- SHELL: 指定shell
- RUN: 运行shell命令
- ENV: 定义环境变量
- CMD: 在启动容器的时候,执行的命令
- WORKDIR: 进入容器之后的落脚点
- EXPOSE: 容器对外保留的端口
- ENTRYPOINT: 在启动容器的时候,执行的命令
DockerFile示例
# 依赖的基础镜像
FROM openjdk:8-jdk-alpine
# 镜像的维护者和邮箱地址
MAINTAINER hweiyu<[email protected]>
# 容器构建过程中,执行命令并创建新的镜像层
# 注意:多个 RUN 命令时,最好通过 && 进行合并操作,要不然,在 docker 构建时,每个 RUN 会生成一层,造成容器臃肿变大
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && \
apk update && \
apk add --no-cache gcc libc-dev make openssl-dev pcre-dev zlib-dev linux-headers curl && \
# 切换到工作目录,同cd命令:cd /usr/local/myapp
WORKDIR /usr/local/myapp
# 将宿主目录中的文件拷贝到镜像中
# ADD 不仅能复制宿主主机中的文件,还能是URL指向的文件。而且如果指向的文件是tar压缩包,在复制到容器后,会进行自动解压
# ADD ./spring-boot-demo.jar app.jar
# COPY 仅能复制宿主主机中的文件
COPY ./spring-boot-demo.jar app.jar
# 定义系统环境变量
ENV profile prod
ENV timezone Asia/Shanghai
# 容器启动时,需要运行的命令,shell格式:
# ENTRYPOINT java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar
CMD java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar
# 对外暴露的端口号
EXPOSE 80 443
标签:容器,name,基础,ID,tag,镜像,Docker,docker
From: https://www.cnblogs.com/jackwolfey/p/18237649