一、镜像操作

1.1、镜像名称

首先来看下镜像的名称组成:

  • 镜像名称一般分两部分组成:[repository]:[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

    这里的MySQL就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。

1.2、镜像命令

常见的镜像操作命令如图:

docker 运行所有镜像 docker镜像操作_docker


可以通过docker --help命令查看,docker相关命令的使用方法。

docker 运行所有镜像 docker镜像操作_容器_02


比如查看镜像docker images命令的使用方法

docker 运行所有镜像 docker镜像操作_运维_03

1.3、案例1—拉取、查看镜像

需求:从DockerHub中拉取一个nginx镜像并查看

  1. 首先去镜像仓库搜索nginx镜像,比如:https://registry.hub.docker.com/
  2. docker 运行所有镜像 docker镜像操作_nginx_04


  3. 根据查看到的镜像名称,拉取自己需要的镜像,通过命令:docker pull nginx
  4. docker 运行所有镜像 docker镜像操作_nginx_05


  5. 通过命令:docker images查看拉取到的镜像
  6. docker 运行所有镜像 docker镜像操作_容器_06


1.4、案例2—保存、导入镜像

需求:利用docker save将nginx镜像导出磁盘,然后再通过docker load加载回来

  1. 利用docker xx --help命令查看docker savedocker load的语法
    例如:查看save命令用法,可以输入命令:docker save --help
  2. docker 运行所有镜像 docker镜像操作_nginx_07

  3. 命令格式:docker save -o [保存的目标文件名称] [镜像名称]
  4. 使用docker save导出镜像到磁盘
    运行命令:
    docker save -o nginx.tar nginx:latest
  5. docker 运行所有镜像 docker镜像操作_运维_08


  6. 使用docker load加载镜像
    先删除本地的nginx镜像:
    docker rmi nginx:latest 然后运行命令,加载本地文件:
    docker load -i nginx.tar
  7. docker 运行所有镜像 docker镜像操作_运维_09


1.5、练习

需求:去DockerHub搜索并拉取一个Redis镜像

  1. 去DockerHub搜索redis镜像
  2. docker 运行所有镜像 docker镜像操作_docker 运行所有镜像_10


  3. 查看Redis镜像的名称和版本
  4. 利用docker pull命令拉取镜像
  5. docker 运行所有镜像 docker镜像操作_docker_11


  6. 利用docker save命令将redis:latest打包为一个redis.tar包
  7. docker 运行所有镜像 docker镜像操作_nginx_12


  8. 利用docker rmi删除本地的redis:latest
  9. docker 运行所有镜像 docker镜像操作_nginx_13


  10. 利用docker load重新加载redis.tar文件
  11. docker 运行所有镜像 docker镜像操作_docker_14


二、容器操作

2.1、容器相关命令

容器操作的命令如图:

docker 运行所有镜像 docker镜像操作_nginx_15


容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源

其中:

  • docker run:创建并运行一个容器,处于运行状态
  • docker pause:让一个运行的容器暂停
  • docker unpause:让一个容器从暂停状态恢复运行
  • docker stop:停止一个运行的容器
  • docker start:让一个停止的容器再次运行
  • docker rm:删除一个容器

2.2、案例—创建并运行一个容器

创建并运行nginx容器的命令:
docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run:创建并运行一个容器
  • --name:给容器起一个名字,比如叫做:mynginx
  • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如:nginx

这里的-p参数,是将容器端口映射到宿主机端口。

默认情况下,容器时隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:

docker 运行所有镜像 docker镜像操作_容器_16


参考文档:

docker 运行所有镜像 docker镜像操作_docker_17

  1. 通过nginx镜像,创建nginx容器
    docker run --name mynginx -p 80:80 -d nginx
  2. docker 运行所有镜像 docker镜像操作_运维_18


  3. 查看运行的容器
  4. docker 运行所有镜像 docker镜像操作_docker 运行所有镜像_19


  5. 测试,访问nignx
  6. docker 运行所有镜像 docker镜像操作_nginx_20


  7. 查看日志
  8. docker 运行所有镜像 docker镜像操作_运维_21

    docker 运行所有镜像 docker镜像操作_docker_22


2.3、案例—进入容器,修改文件

需求:进入nginx容器,修改HTML文件内容,添加"北京,欢迎您!"

  1. 进入容器。进入我们刚刚创建的nginx容器的命令为:
    docker exec -it mynginx bash

命令:

  • docker exec:进入容器内部,执行要给命令
  • -it
  • mynginx:要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个Linux终端交互命令
  • docker 运行所有镜像 docker镜像操作_运维_23


  1. 进入nginx的HTML所在目录 /usr/share/nginx/html 参考官方文档:
  2. docker 运行所有镜像 docker镜像操作_docker 运行所有镜像_24

  3. 容器内部会模拟一个独立的Linux文件系统,看起来如同一个Linux服务器一样:
    nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。
    查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html 我们执行命令,进入该目录:
  4. docker 运行所有镜像 docker镜像操作_nginx_25


  5. 修改index.html的内容
    容器内没有vi命令,无法直接修改,我们用下面的命令来修改:
    sed -i -e 's#Welcome to nginx#北京,欢迎您!#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
  6. docker 运行所有镜像 docker镜像操作_docker_26

  7. 再次通过浏览器访问自己的虚拟机地址,例如我的是:http://192.168.184.110/,即可看到结果
  8. docker 运行所有镜像 docker镜像操作_nginx_27


  9. 其它命令演示
  10. docker 运行所有镜像 docker镜像操作_nginx_28


  11. docker 运行所有镜像 docker镜像操作_docker_29


2.5、小结

docker run命令的常见参数有哪些?

  • --name:指定容器名称
  • -p:指定端口映射
  • -d:让容器后台运行

查看容器日志的命令:

  • docker logs
  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps
  • docker ps -a 查看所有容器,包括已经停止的
三、练习

需求:创建并运行一个redis容器,并且支持数据持久化

  1. 到DockerHub搜索redis镜像
  2. 查看redis镜像文档中的帮助信息
  3. docker 运行所有镜像 docker镜像操作_容器_30


  4. 利用docker run命令运行一个redis容器
  5. docker 运行所有镜像 docker镜像操作_容器_31


  6. 进入redis容器
  7. 执行redis-cli客户端命令
  8. 设置数据 num = 666
  9. docker 运行所有镜像 docker镜像操作_运维_32