Docker学习笔记(二)-docker镜像和容器的基本操作

前言

安装完docker环境之后就是使用docker了,我学习一般喜欢先“知其然”,就是学会用这个东西,然后再“知其所以然”,了解这个技术背后的架构和原理,而使用docker首先就要弄明白image和container。

Docker Image

Image简介

1. Image是文件和Metadata的集合(root filesystem)
2. Image是分层的,并且每一层都可以通过添加或改变删除文件成为一个新的Image
3. 不同的Image可以共享相同的layer
4. Image是只读的
Docker学习笔记(二)-docker镜像和容器的基本操作_第1张图片
如图所示,我们在使用的时候一般会在基础镜像(base image)的基础上去拓展,形成各种各样适合不同使用场景的docker image。

如何得到Image

1.从Dockerfile文件中构建(Build from Dockerfile)
通过编写Dockerfile文件(下一篇会详细说明),执行命令格式:

docker build [OPTIONS] PATH | URL | -

如:

docker build -t xxx/myimage.

其中xxx/myimage表明我们创建的image名,后面的点表示执行当前目录下的Dockerfile文件。其他参数可以参考:菜鸟教程

2.从仓库中拉取(Pull from Registry)
命令格式为:

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

如:

docker pull xxx

在pull的时候后面可以带上不同的版本(tags),不加版本默认最新的版本。

3.Container的commit可以得到新的Image(Create a new image from a container’s changes)
关于Container,在后文有说明。
命令格式:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS参数说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停

如:

docker commit -a "starlh35" -m "My First Commit" a404c6c174a2  myimage:v1.0

Docker Container

Container简介

  1. 通过image创建(copy)
  2. 在image layer之上建立一个container layer(可读可写)
  3. image负责app的存储和分发,container负责运行app
  4. 可以想象为类与对象的关系,image表示类,container表示一个实例对象
    Docker学习笔记(二)-docker镜像和容器的基本操作_第2张图片
    如图,我们使用centos作为基础镜像构造了一个新的Image,Image是只读的,在镜像的基础上我们可以运行Container, Container是可读可写的。

关于Image和Container的其它常用命令

1.列出当前所有的image

docker images             # 或者docker image ls

2.列出当前所有的container

docker container ls       # 或者docker ps

添加-a参数可以查看运行后退出的容器

docker container ls -a    # 或者docker ps -a

3.运行/停止一个容器
命令格式:

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

如:

docker run --name mycontainer  -d myimage:latest

该命令以myimage为名称后台运行一个容器,其他参数可以参考菜鸟教程。
以后运行我们可以直接使用:

docker start [name或containerid]

同理停止可以使用:

docker stop [name或containerid]

4.删除image和contanier
image上面已经介绍过,它相当于一个container启动的模板,而container则是image运行时的的状态。docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。
所以想要删除运行过的image必须首先删除它的container

docker rm [contanier id]   # 删除contanier 
docker rmi [image id]      # 删除image

在使用过程中我们往往回运行许多容器,手动一条一条删除的话很麻烦,我们可以借助如下命令删除所有容器:

docker rm $(docker container ls -aq)                   # 删除所有的container

docker rm $(docker container ls -f "status-exited" -q) # 删除所有已经退出执行的container)

5.Image的发布
上述我们所创建的image可以理解为都是本地image,我们可以通过push命令将我们的镜像传到Docker Hub
公共仓库上供大家使用。
首先需要执行docker login登录,输入账户密码(没有的需要去docker官网注册)

docker login

输入账号密码后就可以提交我们的image了

docker push xxx/myimage:latest

提交后可以通过 docker pull命令随时拉取
6.对运行中的容器操作
对于已经运行的容器我们常用的操作有:

docker exec -it [containerid] /bin/bash   # 进入一个运行中的容器内部

docker exec -it [containerid] ip a        # 查看容器 ip

docker logs [containerid]                 # 查看容器运行产生的日志

docker inspect containerid                # 查看容器状态参数

7.限制容器使用的资源
在运行容器的时候我们可以通过参数调整容器运行时的内存容量,cpu占用率

docker run --memory=200M xxx/myimage          # 限定容器使用内存

docker run --cpu-shares=10 xxx/xxx            # 设置该容器的占用cpu的相对权重

你可能感兴趣的:(docker)