docker常用命令介绍
说明:应用容器化大体上分为三个步骤:
1、配置DockerFile或dock er-compose.yaml等文件
2、基于DockerFile创建镜像
3、基于镜像来创建容器
参考资料:
https://yeasy.gitbook.io/docker_practice#/
基本概念
镜像:一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
分层存储(UnionFS):镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层
容器:镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等.有自己独立的命名空间、文件系统、网络环境,是环境隔离的.
容器存储层:每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层 。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡
仓库:存储镜像的库,可以使用公共库https://hub.docker.com/,也可以自建库.公共库一般网络联通性不好,需要配置国内镜像,此内容不再此详细介绍
docker-compose:是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.它允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
基本架构:Docker 采用了 C/S
架构,包括客户端和服务端。Docker 守护进程 (Daemon
)作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。
镜像命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 docker build [OPTIONS] PATH | URL | - docker build -f /path/to/Dockerfile -t myimage:latest . docker build --build-arg http_proxy=http://proxy:port --build-arg https_proxy=http://proxy:port . docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] docker pull dockurr/windows:2012 docker image ls docker image ls -a docker system df docker run -itd --rm python:3.8 .18 /bin /sh docker image rm [选项] <镜像1 > [<镜像2 > ...]
多阶段构建 为什么要有多阶段构建?
一个项目的构建过程如果全部写在一个dockerfile中会导致命令过多,包括项目及其依赖库的编译、测试、打包等流程.构建过程会非常长,后期维护也不方便.因此把构建分为多个阶段,每一个阶段构建完成后再进行下一阶段构建
多阶段构建与普通构建在文档内容上的区别?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 FROM golang:alpine RUN apk --no-cache add git ca-certificates WORKDIR /go/src/github.com/go/helloworld/ COPY app.go . CMD ["./app" ] FROM golang:alpine as builder RUN apk --no-cache add git WORKDIR /go/src/github.com/go/helloworld/ RUN go get -d -v github.com/go-sql-driver/mysql COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest as prod RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from =0 /go/src/github.com/go/helloworld/app . CMD ["./app" ]
只构建某一个阶段?
利用as来命名别名FROM golang:alpine as builder
例如当我们只想构建 builder
阶段的镜像时,增加 --target=builder
参数即可
docker build –target builder -t username/imagename:tag .
容器命令 1 2 3 4 5 6 7 docker-compose -f win-server-2012. yaml up
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 docker ps docker start container_name_or_id docker attach container_name_or_id docker restart container_name_or_id docker start -p 8080 :80 container_name_or_id docker stop container_name_or_id docker stop -t 30 container_name_or_id docker rm container_name_or_id docker exec -it 69d1 bash
数据卷 数据卷
是一个可供一个或多个容器使用的特殊目录,它绕过 UnionFS,可以提供很多有用的特性:
数据卷
可以在容器之间共享和重用
对 数据卷
的修改会立马生效
对 数据卷
的更新,不会影响镜像
数据卷
默认会一直存在,即使容器被删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 docker volume create my-vol docker volume ls docker run -d --name web --mount source=my-vol,target=/usr/share/nginx/html nginx:alpine docker run -d --name web --mount type =bind,source=my-vol,target=/usr/share/nginx/html nginx:alpine docker volume rm my-vol
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!
本文出自: monkeyGeek
座右铭: 生于忧患,死于安乐
欢迎志同道合的朋友一起交流、探讨!
monkeyGeek