Docker

217 阅读6分钟

Windows(WSL2) Linux子系统搭建Docker环境

www.cnblogs.com/itqn/p/1383…

启动一个redis

docker run -it --rm -p 6379:6379 redis:alpine redis-server --requirepass "123123"

Docker 容器使用

  • 获取镜像
docker pull ubuntu
  • 启动容器

使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it ubuntu /bin/bash

-i: 交互式操作 -t: 终端

  • 查看所有的容器
docker ps -a

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:created(已创建)

restarting(重启中)

running 或 Up(运行中)

removing(迁移中)

paused(暂停)

exited(停止)

dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

  • 查看正在运行的容器
docker ps
  • 查看容器内的标准输出
docker logs  <容器 ID>
  • 启动一个已停止的容器
docker start  <容器 ID>
  • 指定容器后台运行
docker run -itd --name ubuntu-test ubuntu /bin/bash

-d 后台运行,默认不会进入容器

  • 停止一个容器
 docker stop <容器 ID>
  • 重启容器
 docker restart <容器 ID>
  • 进入容器 在使用 -d 参数时,容器启动后会进入后台。

从这个容器退出,会导致容器的停止。

docker attach <容器 ID>

退出容器终端,不会导致容器的停止。

docker exec  <容器 ID>
  • 导出容器
 docker export 1e560fca3906 > ubuntu.tar
  • 导入容器

将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

指定 URL 或者某个目录来导入

docker import http://example.com/exampleimage.tgz example/imagerepo
  • 删除容器
 docker rm -f <容器 ID>
  • 清理掉所有处于终止状态的容器
docker container prune

运行一个 web 应用

在docker容器中运行一个 Python Flask 应用来运行一个web应用

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py

-d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。

  • 查看web应用容器 查看正在运行的容器:
 docker ps 

PORTS:端口信息

0.0.0.0:49153->5000/tcp, :::49153->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

这时我们可以通过浏览器访问WEB应用 http://192.168.31.127:49153/

我们也可以通过 -p 参数来设置不一样的端口:

docker run -d -p 5000:5000 training/webapp python app.py

查看正在运行的容器

docker ps 

容器内部的 5000 端口映射到我们本地主机的 5000 端口上。

http://192.168.31.127:5000/

  • 查看网络端口的快捷方式
docker port <容器 ID>
  • 查看 WEB 应用程序日志

查看容器内部的标准输出。

docker logs <容器 ID>

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

 docker logs -f  <容器 ID>
  • 查看WEB应用程序容器的进程
docker top <容器 ID> 
  • 检查 WEB 应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker inspect <容器 ID> 
  • 停止 WEB 应用容器
docker stop  <容器 ID> 
  • 重启WEB应用容器

启动已经停止的容器

 docker start  <容器 ID> 

重启正在运行的容器

docker restart <容器 ID> 
  • 移除WEB应用容器
docker restart <容器 ID> 

删除容器时,容器必须是停止状态,否则会报如下错误:

Error response from daemon: You cannot remove a running container 4d8a355def18f5a13b3d933e918c2e2a7e383bd8792671a6f246b1f21d05cb1a. Stop the container before attempting removal or force remove

docker 镜像的使用

  • 列出镜像列表
docker images     

各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

  • 获取一个新的镜像
docker pull ubuntu:20.04
  • 查找镜像
docker search httpd

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

  • 拖取镜像
docker pull httpd
  • 删除镜像
docker rmi hello-world
  • 创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1、从已经创建的容器中更新镜像,并且提交这个镜像

2、使用 Dockerfile 指令来创建一个新的镜像

  • 更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

docker run -t -i ubuntu:20.04 /bin/bash

在运行的容器内使用apt-get update命令进行更新。 在完成操作之后,输入 exit 命令来退出这个容器。 此时ID为f5a234b2e470的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

sudo docker commit -m="has update" -a="tang" f5a234b2e470 tang/ubuntu:v2

各个参数说明:

-m: 提交的描述信息

-a: 指定镜像作者

f5a234b2e470:容器 ID

tang/ubuntu:v2: 指定要创建的目标镜像名

我们可以使用docker images 命令来查看我们的新镜像 tang/ubuntu:v2

使用我们的新镜像 tang/ubuntu 来启动一个容器

 docker run -t -i tang/ubuntu:v2 /bin/bash        
  • 构建镜像 我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
touch Dockerfile

FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'tang:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t runoob/centos:6.7 .

参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

我们可以使用新的镜像来创建容器

docker run -t -i runoob/centos:6.7  /bin/bash
id tang

从上面看到新镜像已经包含我们创建的用户 tang。

  • 设置镜像标签 我们可以使用 docker tag 命令,为镜像添加一个新的标签。
 docker tag 860c279d2fec runoob/centos:dev