Docker安装与常用命令

1.Docker简述

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

2.Docker生命周期

一句话简述生命周期

Docker镜像拉取pull一个image并创建在本地,通过creat在服务器上创建容器,通过start命令启动已创建的容器,随后根据需求,使用pause/unpause/stop控制容器的启停/暂停。

3.Docker安装

官网下载方式

https://docs.docker.com/engine/install/

脚本安装方式

官方脚本

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

国内镜像

curl -sSL https://get.daocloud.io/docker | sh

更多安装方式

4.安装完成

启动docker

sudo systemctl start docker

设置开机启动

sudo systemctl enable docker

测试docker是否安装完成

docker run hello-world

从中央仓中拉取名为hello-world的容器

结果

出现此信息,Docker已正确安装,后面通过docker ps -a可以查到部署过的hello-world容器

5.配置开机docker容器开机自启

1.docker的update命令

[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker update --help
Usage:	docker update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
Options:
      --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int          Limit the CPU real-time period in microseconds
      --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpus decimal               Number of CPUs
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
      --kernel-memory bytes        Kernel memory limit
  -m, --memory bytes               Memory limit
      --memory-reservation bytes   Memory soft limit
      --memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --pids-limit int             Tune container pids limit (set -1 for unlimited)
      --restart string             Restart policy to apply when a container exits

[root@iZbp1e9mxelwe7pwimpw8sZ ~]

#

翻译结果

选项:
      --blkio-weight uint16块IO(相对权重),介于10到1000之间,或者禁用0(默认为0)
      --cpu-period int限制CPU CFS(完全公平的调度程序)期限
      --cpu-quota int限制CPU CFS(完全公平的调度程序)配额
      --cpu-rt-period int限制CPU实时时间(以微秒为单位)
      --cpu-rt-runtime int以毫秒为单位限制CPU实时运行时间
  -c,--cpu-shares int CPU份额(相对权重)
      --cpus十进制CPU数
      --cpuset-cpus允许执行的字符串CPU(0-3,0,1)
      --cpuset-mems允许执行的字符串MEM(0-3,0,1)
      --kernel-memory字节内核内存限制
  -m,--memory bytes内存限制
      --memory-reservation字节内存软限制
      --memory-swap字节交换限制等于内存加交换:'-1'以启用无限交换
      --pids-limit int调整容器的pids限制(设置-1为无限制)
      --restart字符串容器退出时要应用的重新启动策略

2.–restart参数解释

参数名解释
no不自动重启容器. (默认值)
on-failure容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:3
unless-stopped在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算

3.设置开机自启动(以容器名为tomcat8的容器为例)

docker update --restart=always tomcat8

4.测试结果

关闭所有容器

[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@iZbp1e9mxelwe7pwimpw8sZ ~]

#

重启开机后的结果:容器已经自启动

[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
b397fad059a2        tomcat:8            "/usr/local/tomcat8/…"   5 weeks ago         Up 8 seconds        0.0.0.0:80->8080/tcp   tomcat8

[root@iZbp1e9mxelwe7pwimpw8sZ ~]

#

6.Docker常用命令

1.通过Dockerfile构建镜像容器

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

首先,编写一份Dockerfile文件(Dockerfile文件语法编写待续,可直接学习这里的)

Dockerfile详解

编写完,运行Dockerfile创建需要拉取的镜像并配置容器中安装的软件、部署的项目。

bulid命令

下面以部署一个nginx进容器为例

该命令需在Dockerfile文件的存放目录下运行

通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。

:最后的.代表本次执行的上下文路径。

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

docker build -t nginx:v3 .

然后通过run命令,将镜像运行

run命令

命令格式:

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

可当create和start命令使用

1、不传参运行

$ docker run  nginx:test

容器内会默认运行以下命令,启动主进程。

nginx -c /etc/nginx/nginx.conf

2、传参运行

$ docker run  nginx:test -c /etc/nginx/new.conf

容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

nginx -c /etc/nginx/new.conf

2.容器增删查、状态pull、create、start、pause、unpause、stop、run、restart

docker容器的生命周期

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
从远程docker hub中提取图像并将其保存在本地计算机中。此命令与Git pull命令的作用相同。
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
此命令按指定的图像创建新的Docker容器。
docker start [OPTIONS] CONTAINER [CONTAINER...]
此命令用于将已退出或新创建的容器启动到运行状态。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
此命令创建一个新容器,并在新创建的容器中运行该映像。“docker create”和“docker start”命令都可以通过此单个命令执行。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
此命令将停止正在运行的容器。这会将容器状态从运行更改为激动。
docker pause CONTAINER [CONTAINER...]
此命令通过发出SIGSTOP命令来暂停正在运行的容器中的正在运行的进程。
docker unpause CONTAINER [CONTAINER...]
此命令将暂停进程返回到运行状态。

查看

docker ps #查看正在运行的容器
docker ps -a #查看所有容器
docker images #查看所有镜像

查看容器状态

docker stats 容器名/容器id

删除容器、镜像

docker rm 容器名/容器id #删除容器
docker rmi 镜像id #删除镜像

3.进入容器exec、attach

进入容器的命令有两种:

docker exec: 在已运行的容器中,执行命令,操作对象是容器,如果你要进入已运行的容器,并且执行命令,用exec。

docker attach: 同样操作的是已运行的容器,可以将本机标准输入(键盘输入)输到容器中,也可以将容器的输出显示在本机的屏幕上,如果你想查看容器运行过程中产生的标准输入输出,用attach。

一般情况,我们使用的是:

exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
	-d :分离模式: 在后台运行
	-i :即使没有附加也保持STDIN 打开
	-t :分配一个伪终端
CONTAINER:容器名称或ID,必选,看出exec操作的对象是容器
COMMAND:命令,必选(一般填写bash)

例子

$ docker exec -i -t  mynginx /bin/bash

attach

docker attach [OPTIONS] CONTAINER
CONTAINER:容器名称或ID,必选,attach的操作对象也是容器

例子

docker attach mynginx

退出快捷键,使用该方法可以避免退出容器时同时停止容器

Ctrl+P+Q

进入容器时卡停

  1. 只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取。
  2. 如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。
  3. 在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
  4. 使用-it时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。
docker exec -it +容器ID /bin/bash

详细exec解析看这里

4.查看容器日志

docker logs 容器名/容器id

持续查看容器日志(使用场景:容器启动失败排查)

docker logs -f 容器名/容器id

5.查看容器状态

容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。

docker top 容器名称/id

7.docker容器部署镜像加速

docker镜像源配置

留下评论

邮箱地址不会被公开。 必填项已用*标注