Docker:常用基本命令教程LinuxServer

savh 1573

基本概念

镜像   image     容器   container      仓库   repository

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

容器

镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会把容器和虚拟机搞混。

仓库

镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry 就是这样的服务。

基本应用

1) 查看所有镜像

docker images

2)  拉取镜像

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

3) 运行一个新容器并给它起个名字

docker run -it --name temp ubuntu:16.04
# -i 交互式操作
# -t 终端
# --name temp 容器起名字为temp
# ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器

输入命令vim,git等命令,可以看到命令都无法使用,可以确定我们使用的是一个纯净的容器。

4) 查看容器列表

docker ps 
# 查看启动了的容器docker ps -a 
# 查看所有的容器(启不启动都算)

5) 启动容器

docker start temp 
# temp可以是容器名或者id(id在ps命令中可以看到)

6) 运行容器

docker exec -it temp bash
# -i 交互式操作
# -t 终端# bash:放在镜像名后的是命令。这里我们希望有个交互式 Shell,因此用的是 bash(开启一个人机交互的窗口)。

7)   删除镜像

  1)查询容器

docker ps -a   查询容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                      NAMES
6adbd1b933a9        nginx:alpine        "nginx -g 'daemon of…"   11 minutes ago      Up 11 minutes               0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   dnmp-nginx
7ba3e71d7310        nginx               "/bin/bash"              47 hours ago        Exited (127) 47 hours ago                                              goofy_bhaskara
70278207ab92        mysql:8.0.11        "docker-entrypoint.s…"   12 days ago         Up 11 minutes               0.0.0.0:3306->3306/tcp                     dnmp-mysql884a717efe4e        dnmp_php            "docker-php-entrypoi…"   12 days ago         Up 11 minutes               9000/tcp                                   dnmp-php

  2)删除指定容器

docker rm 884   //删除PHP

  3)查询镜像

docker images  
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               latest              7042885a156a        11 days ago         109MBdnmp_php            latest              172f496bb458        12 days ago         535MBnginx               alpine              315798907716        13 days ago         17.8MBredis               4.0                 b00f982f9bf7        3 weeks ago         83.4MBphp                 7.2-fpm             2bd622691e6e        4 weeks ago         371MBmysql               8.0.11              5dbe5b6313e1        5 months ago        445MB

  4)删除镜像

docker rmi 5db
注意:
1. 删除前需要保证容器是停止的  stop
2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID  ,其中 容器(rm)  和 镜像(rmi)
3. 顺序需要先删除容器


常用命令
命令            说明            文档地址            
docker search寻找镜像docker search            
docker pull拉取镜像docker pull            
docker login登录DockerHubdocker login            
docker push推送镜像到 DockerRegistrydocker push            
docker images查看本地镜像docker images            
docker rmi删除本地镜像docker rmi            
docker run创建并运行容器(不能重复创建)docker run            
docker stop停止指定容器docker stop            
docker start启动指定容器docker start            
docker restart重新启动容器docker restart            
docker rm删除指定容器docs.docker.com            
docker ps查看容器docker ps            
ocker logs查看容器运行日志docker logs            
docker exec进入容器docker exec            
docker cp容器和宿主机文件拷贝docker cp            
docker save保存镜像到本地压缩文件docker save            
docker load加载本地压缩文件到镜像docker load            
docker inspect查看容器详细信息docker inspect            
案例:

教学环节说明:以 Nginx 为例演示上述命令。

# 第1步,去DockerHub查看nginx镜像仓库及相关信息
docker search nginx
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
_REPOSITORY   TAG       IMAGE ID       CREATED         SIZE_
_nginx        latest    605c77e624dd   16 months ago   141MB_
_mysql        latest    3218b38490ce   17 months ago   516MB_
# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx
# 第5步,查看运行中容器
docker ps  
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第6步,访问网页,地址:http://虚拟机地址
# 第7步,停止容器
docker stop nginx
# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第9步,再次启动nginx容器
docker start nginx
# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第11步,查看容器详细信息
docker inspect nginx
# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p
# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
更多功能:

1、开机自启

默认情况下,每次重启虚拟机我们都需要手动启动 Docker 和 Docker 中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker
# Docker容器开机自启
docker update --restart=always [容器名/容器id]

2、容器保存

a. 容器保存为镜像

docker commit mynginx mynginx_i

b. 将镜像保存为tar 文件

docker  save -o mynginx.tar mynginx_i

c. 镜像恢复与迁移,先删除掉mynginx_img镜像,然后执行此命令进行恢复

docker load -i mynginx.tar

-i 输入的文件

执行后再次查看镜像,可以看到镜像已经恢复


更多相关:

1. Docker快速入门

2. 常用基本命令

3. 快速学习Docker

4. 如何修改容器端口

5. Docker相关文章


http://www.savh.cn/thread-1161.htm

转载请注明:Savh.Cn 发表

推荐阅读
最新动态 (1)
  • 2
    笔记:

    拉一个镜像:

    docker pull centos:7

    运行一个新容器并给它起个名字:

    docker run -it --name c7 centos:7

    启动容器:

    docker start c7

    查看镜像:

    docker ps

    运行镜像:

    docker exec -it temp bash


( 登录 ) 后,可以发表评论!

返回