初识 Docker

初识 Docker

Docker 是近几年比较火的技术,每个技术栈的程序员对应该对其有所了解,本文是自己作为一个栈外人学习 Docker 的一些笔记或总结。

About Dcoker

首先,通过官网的两句 Slogan 来感受一下:

  • Docker is the world’s leading software containerization platform
  • Build, Ship and Run any App, Anywhere

Dokcer 是一个容器化平台,要搞懂 Docker 的概念,必须先从 容器 入手。容器即将软件及其依赖环境打包成独立、标准的单元,以用于分发、部署和运行等。容器类似于虚拟机,但不是虚拟机,比虚拟机更轻量。容器是对操作系统的抽象,而虚拟机是对硬件的抽象。

Dokcer 具备 轻量化独立性 等特点。Docker 容器共享操作系统内核,能够迅速启动,占用很少的计算和内存资源。Dokcer 镜像是一个独立的可执行软件包,它包含运行所需的一切代码、运行时、系统工具、系统库和设置等,可以避免同一基础架构上运行不同软件的环境冲突等。

架构及概念

  • Image: 镜像,特殊的文件系统,包括应用程序及其运行环境,分层存储的架构
  • Container:容器,镜像运行时的实体,实质是进程
  • Registry:镜像仓库,集中存放镜像的地方,SaaS服务
  • Daemon:守护进程
  • Client:客户端
  • Host: 宿主机

国内外常用仓库:

常用命令

docker pull:从仓库拉取镜像
docker run:运行容器

docker commit:将容器中的修改提交为镜像
docker build:通过 Dockerfile 的定义来构建镜像
docker push:将镜像推送的仓库

docker images:查看本地的镜像
docker ps:查看当前正在运行的容器

docker image:列举镜像相关的所有命令
docker container:列举容器相关的所有命令

拉取镜像

docker pull 命令:

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)

其中 TAG 的默认值为 latest ,下面演示从国内仓库拉取 alpine 最新镜像(如果不指定仓库地址,将从国外仓库下载)。

D:\>docker pull registry.docker-cn.com/library/alpine:latest
latest: Pulling from library/alpine
ff3a5c916c92: Pull complete
Digest: sha256:e1871801d30885a610511c867de0d6baca7ed4e6a2573d506bbec7fd3b03873f
Status: Downloaded newer image for registry.docker-cn.com/library/alpine:latest

通过 docker images 命令查看本地镜像:

D:\>docker images
REPOSITORY                              TAG                              IMAGE ID            CREATED             SIZE
registry.docker-cn.com/library/alpine   latest                           3fd9065eaf02        5 months ago        4.15MB

启动容器

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
  -i, --interactive         Keep STDIN open even if not attached
  -t, --tty                 Allocate a pseudo-TTY
  -d, --detach              Run container in background and

D:\>docker run -it -d 3fd9065eaf02
d8df22290941805825fe13e389b4b995113c6cfd9154dd9b499c05b3be7db698
D:\>docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d8df22290941        3fd9065eaf02        "/bin/sh"           4 seconds ago       Up 3 seconds                            sleepy_leakey

D:\>docker exec d8df22290941 echo Hello Docker
Hello Docker

生成镜像

构建 Docker 镜像有以下两种方式:

  • 使用 docker commit 命令
  • 使用 docker build 命令和 Dockerfile 文件

Dockerfile 语法

FROM : base image
RUN : 执行命令
ADD : 添加文件(包括远程服务器,HTTP/FTP)
COPY : 添加文件或目录
CMD : 执行入口(ENTRYPOINT)
EXPOSE : 暴露端口
WORKDIR : 指定路径(运行命令)
MAINTAINER : 维护者
ENV : 设定环境变量
USER : 指定用户,通常不用root
VOLUME : mount point(容器所挂在的卷)

Dockerfile 实例

From alpine:latest
MAINTAINER Iron
CMD echo hello docker

docker build -t hello_docker .  // .表示所有内容送给 docker enginer 编译成docker

RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /va/www/html
ENTRYPOINT ["/user/sbin/nginx", "-g", "daemon off;"]  // 将nginx在前台执行
EXPOSE 80

镜像分层存储

  • 每一行对应一层,分层共享
  • 容器运行起来会加载一个container(可写),其它层只读
FROM ubuntu:14.04
ADD run.sh /
VOLUME /data
CMD [“./run.sh”]
D:\Docker\New folder>docker build .
Sending build context to Docker daemon  3.584kB
Step 1/4 : FROM ubuntu:14.04
 ---> 578c3e61a98c
Step 2/4 : ADD run.sh /
 ---> d520c5c81f2e
Step 3/4 : VOLUME /data
 ---> Running in 27c7a6153279
Removing intermediate container 27c7a6153279
 ---> b5327c7403b5
Step 4/4 : CMD [“./run.sh”]
 ---> Running in cf02ecda0bf5
Removing intermediate container cf02ecda0bf5
 ---> 51cedcaa4906
Successfully built 51cedcaa4906

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ironyho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值