docker容器基础

docker容器基础

1. docker是什么

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2. docker的基础命令

2.1 查看docker版本:

docker -v

2.2 查看docker信息:

docker info

2.3 搜索镜像:

docker search 镜像名称

2.4 拉取镜像:

docker pull 镜像名称:tag

2.5 查看本地镜像:

docker images

2.6 删除本地镜像:

docker rmi 镜像id

2.7 运行容器:

docker run -it --name 容器名称 镜像名称:tag

-it:以交互模式运行容器

–name:命名容器

2.8 查看正在运行的容器:

docker ps  

2.9 查看所有容器(包括未运行的):

docker ps -a

2.10 启动容器:

docker start 容器id或名称

2.11 停止容器:

docker stop 容器id或名称

2.12 进入容器:

docker exec -it 容器id或名称 /bin/bash

2.13 删除容器:

docker rm 容器id或名称

3. 镜像操作

3.1 镜像加载:

docker load < 镜像tar文件

3.2 镜像保存:

docker save 镜像id或名称 > 目标tar文件

3.3 镜像导出:

docker export 容器id或名称 > 目标tar文件

3.4 镜像导入:

cat 镜像文件 | docker import - 镜像名称:TAG

4. 容器操作

查看容器日志:

docker logs 容器id或名称  

查看容器内进程:

docker top 容器id或名称

查看容器内部细节:

docker inspect 容器id或名称

进入运行中的容器:

docker attach 容器id或名称

从容器内拷贝文件到主机:

docker cp 容器id:容器内路径 目的主机路径

5. 数据卷操作

数据卷:

docker run -it -v /data 镜像名 

-v:绑定一个数据卷

上面会在主机自动创建一个数据卷,挂载到容器的/data

指定主机目录:

docker run -it -v 主机目录:容器目录 镜像名

6. Dockerfile常用指令

FROM: 设置镜像基础

FROM centos

RUN: 执行命令

RUN yum install -y vim

COPY: 复制文件

COPY src dest

ADD: 添加本地文件或远程文件

ADD src dest 

CMD: 容器启动命令

CMD ["python", "app.py"]

ENTRYPOINT: 入口点指令

ENTRYPOINT ["python", "app.py"]

ENV: 设置环境变量

ENV NAME xxx

ARG: 构建参数

ARG VERSION=1.0  

VOLUME: 定义匿名卷

VOLUME ["/data"]

EXPOSE: 暴露端口 只是声明

EXPOSE 80

WORKDIR: 指定工作目录

WORKDIR /app

USER: 指定运行用户

USER nginx

7. RUN与WORKDIR区别

RUN: 用于执行命令行命令,执行完成后,会提交一个新的镜像层。RUN经常用于安装软件包。

RUN yum install -y vim  

WORKDIR: 用于切换工作目录,相当于cd命令,但不会提交新的镜像层。

WORKDIR /root

对比:

  • RUN会创建新的镜像层,WORKDIR不会:
RUN命令后面每执行一次都会创建一层镜像。  
WORKDIR切换多次目录,也只会创建一个镜像层。
  • RUN用于执行命令,WORKDIR用于切换目录:
RUN yum install vim    # 执行命令
WORKDIR /root          # 切换目录
  • RUN可以运行多个,每个RUN会创建一个新层。WORKDIR可以运行多个,但只有最后一个有效:

每个RUN都会创建一个新层

RUN命令1   
RUN命令2

只有最后一个WORKDIR有效

WORKDIR /home
WORKDIR /root  

8. CMD与ENTRYPOINT

CMD: 用于设置容器启动后默认执行的命令和参数,如果docker run指定了其他命令,则会覆盖CMD。

CMD ["python","app.py"]

ENTRYPOINT: 也用于设置启动命令,但不能被docker run的参数覆盖,仅能传参。

ENTRYPOINT ["python", "app.py"] 

对比:

  • CMD会被docker run覆盖,ENTRYPOINT不会:

CMD会被覆盖

docker run 镜像 sh

ENTRYPOINT不会被覆盖,只能传参

docker run 镜像 sh app.py
  • CMD用于设置默认参数,配合ENTRYPOINT使用:

CMD设置默认参数

ENTRYPOINT ["python"]
CMD ["app.py"]

docker run可以修改参数

docker run 镜像 app2.py
  • 一个Dockerfile中,只能有一个CMD,可以有多个ENTRYPOINT:

只有一个CMD生效

CMD python app.py  
CMD node app.js

都会生效,可作为两个镜像

ENTRYPOINT python app.py
ENTRYPOINT node app.js 

9. ADD与COPY

ADD: 可以将本地文件复制到容器中,也可以直接从URL下载文件放入容器。ADD还具有解压缩的功能。

ADD package.tar.gz /usr/src

COPY: 仅用于从本地复制文件到容器,不具有解压功能。

COPY package.tar.gz /usr/src 

对比:

  • ADD复制文件并可以解压缩,COPY仅复制不解压:
ADD自动解压  
COPY不会解压
  • ADD可以从URL下载文件,COPY不能:

可以下载url文件

ADD http://文件url /usr/src

无法下载url文件

COPY http://文件url /usr/src   
  • 一般优先使用COPY,因为更清晰简单:
COPY package.tar.gz /usr/src  
RUN tar -xzf /usr/src/package.tar.gz -C /usr/src

10. 镜像优化-选择合适的基础镜像

选择合适的基础镜像可以优化镜像大小:

  • 使用小型基础镜像,如alpine
  • 对于Linux,选择debian而不是ubuntu
  • 去除不需要的默认安装软件包
  • 使用同一个基础镜像,进行复用

11. 镜像优化-多阶段构建

多阶段构建可以仅把需要的结果复制到最后一个镜像:

FROM golang:1.14.4-alpine AS builder
WORKDIR /opt
COPY hw.go /opt
RUN go build /opt/hw.go

FROM apline:3.12
COPY --form=builder /opt/hw
CMD ["./hw"]

只将编译结果复制到第二阶段的镜像,可以减小大小。

ar.gz -C /usr/src


## 10. 镜像优化-选择合适的基础镜像

选择合适的基础镜像可以优化镜像大小:

- 使用小型基础镜像,如alpine
- 对于Linux,选择debian而不是ubuntu
- 去除不需要的默认安装软件包
- 使用同一个基础镜像,进行复用

## 11. 镜像优化-多阶段构建

多阶段构建可以仅把需要的结果复制到最后一个镜像:

```dockerfile
FROM golang:1.14.4-alpine AS builder
WORKDIR /opt
COPY hw.go /opt
RUN go build /opt/hw.go

FROM apline:3.12
COPY --form=builder /opt/hw
CMD ["./hw"]

只将编译结果复制到第二阶段的镜像,可以减小大小。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值