Docker:基础

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<hwy_dod@163.com>

# 容器构建过程中,执行命令并创建新的镜像层
# 注意:多个 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
posted @ 2024-06-07 17:53  jackwolfey  阅读(30)  评论(0)    收藏  举报