目录
  1. 1. dockers基础
  2. 2. welcome to my blog
  3. 3. happy birthday to wy
    1. 3.1. 什么是DOCKER
    2. 3.2. 重要概念
      1. 3.2.1. 如何产生镜像
      2. 3.2.2. 如何产生容器
    3. 3.3. 镜像操作
      1. 3.3.1. docker images 查看镜像
      2. 3.3.2. 拖取镜像
      3. 3.3.3. 删除镜像
      4. 3.3.4. 设置镜像标签
    4. 3.4. 容器操作
      1. 3.4.1. 查看容器
      2. 3.4.2. 启动容器
      3. 3.4.3. 停止容器
      4. 3.4.4. 退出容器
    5. 3.5. 容器文件操作
      1. 3.5.1. 后台运行
      2. 3.5.2. 删除容器
      3. 3.5.3. 导出和导入容器
      4. 3.5.4. 运行一个 web 应用
      5. 3.5.5. 查看 WEB 应用程序日志
      6. 3.5.6. 查看WEB应用程序容器的进程
    6. 3.6. run和start的区别
    7. 3.7. 关于镜像tag
      1. 3.7.1. 杂笔记
docker基础

dockers基础

welcome to my blog

>.< 生日快乐!

happy birthday to wy

什么是DOCKER

别人的吐血总结

1
2
3
4
5
6
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。
程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
有了 Docker ,就不用担心环境问题。
这里文件就是指镜像
Docker镜像 可以看作是一个特殊的文件系统,
除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

重要概念

docker是对容器进行操作的,镜像是产生容器的关键

在我的理解,docker主要是对镜像和容器进行一些操作

如何产生镜像

1.拉取一个 DOCKER 镜像,我们可以用如下命令:

1
docker pull image_name
  • image_name就是指的镜像
  • pull就是拉取一个镜像

命令 docker pull 来下载的镜像都是docker 镜像仓库中存在的

2.更新镜像

1
2
3
我们需要使用镜像来创建一个容器。
对容器进行操作后
使用 apt-get update 命令进行更新。

在完成操作之后,通过命令 docker commit 来提交容器副本

1
2
3
4
5
6
7
8
9
docker commit -m="something" -a="zzl" 容器ID image_name:tag

各个参数说明:

-m: 提交的描述信息

-a: 指定镜像作者

image_name:v1: 指定要创建的目标镜像名和标签

3.构建镜像

我们使用命令 docker build 从零开始来创建一个新的镜像。

为此,我们需要创建一个 Dockerfile 文件

1
2
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
’#’ 为 Dockerfile 中的注释。

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以字符开头则被视为注释。可以在Docker文件中使用RUNCMDFROMEXPOSEENV等指令。

具体以后会了补充。。

如何产生容器

1
2
docker run 镜像名
#docker run是利用镜像生成容器,并启动容器
1
2
3
4
5
6
7
8
9
#一般可以加参数,否则只会生成一个容器的id

如:docker run --name container-name -t -i -d ubuntu:1 /bin/bash
--name:自定义容器名,可不加
-i: 交互式操作。
-t: 终端。
-d:表示后台运行
ubuntu:1: 这是指用 ubuntu 中tag为1的镜像为基础来启动容器。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

镜像操作

docker images 查看镜像

REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

拖取镜像

命令 docker pull来下载镜像。

1
docker pull image_name

删除镜像

1
docker rmi image_name

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

1
2
3
4
docker tag image_id image_name:tag

#docker tag 镜像ID,用户名称、镜像源名(repository name)和新的标签名(tag)。
#感觉像是新建了一个镜像

容器操作

查看容器

1
2
3
docker ps		#查看运行的容器
docker ps -a #查看所有容器
docker ps -l #查询最后一次创建的容器

启动容器

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

1
2
3
4
5
6
docker run -it image_name /bin/bash
#run有创建容器的功能

docker start <容器 ID>
docker restart <容器 ID>
#启动已停止运行的容器,id可以用docker ps -a查看

停止容器

1
docker stop <容器 ID>

退出容器

1
exit 命令或者使用 CTRL+D 来退出容器

容器文件操作

  • 容器内部操作

先进docker容器内部

z 把电脑上的文件导入到容器内部

sz 把容器内部的文件导出到电脑本地

使用rz和sz命令,需安装lrzsz工具包,centos 系统用 yum

yum install lrzsz

ubuntu 系统用 apt-get

apt-get install lrzsz

1
2
3
4
5
使用rz 把本地电脑文件传到docker 容器,
输入rz 就会弹出文件选项框,选择文件上传

把容器内部的文件导出到电脑本地用sz命令加上文件名称
sz 文件名
  • 容器外部操作
1
2
3
4
5
6
7
把宿主机上的文件复制到docker容器内部

docker cp /path/filename 容器id或名称:/path/filename

也可以把docker容器内部的文件复制到本地

docker cp 容器id或名称:/path/filename /path/filename

后台运行

docker run  -itd ubuntu:1  /bin/bash
#-d:表示后台运行,为了方便一般后台运行

进入后台运行的容器有两种方法

1.docker attach

1
2
3
docker attach  <容器 ID>

#如果exit从这个容器退出,会导致容器的停止。

2.docker exec (推荐,退出不会停止)

1
2
3
docker exec -it  <容器 ID> /bin/bash

#如果从这个容器退出,不会导致容器的停止

删除容器

删除容器使用 docker rm 命令:

1
$ docker rm -f  <容器 ID>

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

1
2
3
4
5
docker export 容器ID  > 导出的路径文件名


docker export 1e560fca3906 > ubuntu.tar
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像

1
2
3
4
5
cat 要导入的文件 | docker import - 导入的镜像和tag


cat ubuntu.tar | docker import - ubuntu:v1
将快照文件 ubuntu.tar 导入到镜像 ubuntu:v1

也可以通过指定 URL 或者某个目录来导入,例如:

1
$ docker import http://example.com/exampleimage.tgz example/imagerepo

运行一个 web 应用

1
2
3
docker run -d -P 镜像名 python app.py

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

参数说明:

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

docker ps 来查看我们正在运行的容器,多了端口信息。

1
2
3
4
PORTS
0.0.0.0:32769->5000/tcp

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

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

  • -P:是容器内部端口随机映射到主机的高端口。(大写)
  • -p:是容器内部端口绑定到指定的主机端口。(小写)

如:docker run -d -p ip:5000:5000 镜像名 python app.py

ip默认 0.0.0.0

容器端口的映射情况

1
docker port 容器id或名字

查看 WEB 应用程序日志

1
docker logs [ID或者名字]

查看WEB应用程序容器的进程

1
2
3
docker top [ID或者名字] 

#可查看进程号,运行命令等

run和start的区别

 docker中run和start的区别
docker run 后面指定的是一个镜像

而docker start指定的是一个容器

docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器 

关于镜像tag

在我的理解下,tag一般用来,对同一个镜像的不同版本进行标记

在对镜像操作中,一般都用到 image_name:tag

默认的tag一般为 latest

杂笔记

#实例运行、运行交互式的容器

sudo docker run -i -t  skysider/pwndocker /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
1
2
3
4
5
6
7
8
9
10

docker stop container-name/container-id 停止当前运行的指定容器

启动 docker start container-name/container-id 启动容器

删除 docker rm container-id 删除指定容器

端口映射 -p 6379:6379
如:docker run  --name myredis  -d -p 6379:6379 docker.io/redis
-p:主机端口映射到容器内部的端口

停止容器
​ docker stop

exit 命令或者使用 CTRL+D 来退出容器。

后台启动容器

sudo docker run -itd  skysider/pwndocker /bin/bash
 -d 参数时,容器启动后会进入后台
 -i: 允许你对容器内的标准输入 (STDIN) 进行交互。    
 -t: 在新容器内指定一个伪终端或终端。

docker ps 查看

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

例如
docker attach 4b6771050406
docker exec -it b26d4f3e2cac /bin/bash

删除容器使用 docker rm 命令:
docker rm -f 1e560fca3906

ocker Hub 网站来搜索镜像

面是一段简单的Dockerfile的例子:

FROM python:2.7
MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]
我们可以分析一下上面这个过程:

1、从 Docker Hub 上 pull 下 python 2.7 的基础镜像
2、显示维护者的信息
3、copy 当前目录到容器中的 /app 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>
4、指定工作路径为 /app
5、安装依赖包
6、暴露 5000 端口
7、启动 app
这个例子是启动一个 python flask app 的 Dockerfile ( flask 是 python 的一个轻量的 web 框架),相信大家从这个例子中能够稍微理解了Dockfile的组成以及指令的编写过程。
文章作者: zzl
文章链接: https://www.zzl14.xyz/2020/02/16/docker基础/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 try
打赏
  • 微信
  • 支付宝

评论