云原生系列之docker的容器管理实战

前言

之前我们已经探讨过了docker的镜像,看了下时间,距离上次介绍容器的镜像已经过去两个月了, 如果你已经忘记了,可以直奔专栏:容器管理

从今天开始,我们要探讨docker 的容器了,docker的容器都是从镜像开始创建的,涉及到的操作有: 创建容器,停止容器,进入容器,删除容器,导入和导出容器等。

文章目录

  • 前言
  • 一. 基础命令
    • 1. docker create 创建容器
    • 2. docker start 可以运行容器
    • 3. 使用docker run命令可以直接创建容器并启动
    • 4. docker exec 可以进入容器内
    • 5. docker rm -f 删除某个容器
    • 6. docker export 导出为文件
    • 7. docker import
  • 总结

一. 基础命令

1. docker create 创建容器

比如基于nginx的镜像创建一个名字为 mycontainer的容器,这么创建,我们无法用docker ps查看到创建的容器,因为此时容器还没有启动。

[root@mufeng41 ~]# docker create --name mycontainer nginx 
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
934352be273e17f481397faa897da2a6adcaf2c1cc45d3e88d12c6007da39649


当我们用docker ps 查看的时候,发现没有刚刚创建的容器

[root@mufeng41 ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED       STATUS       PORTS                                                  NAMES
0ae30069fe97   mysql:5.7   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

但我们可以用docker ps -a 查看,只能看到created ,已经创建成功,没有运行。

[root@mufeng41 ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS       PORTS                                                  NAMES
934352be273e   nginx       "/docker-entrypoint.…"   21 seconds ago   Created                                                             mycontainer
0ae30069fe97   mysql:5.7   "docker-entrypoint.s…"   2 hours ago      Up 2 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql


[root@mufeng41 ~]# docker ps -a |grep mycontainer
934352be273e   nginx       "/docker-entrypoint.…"   3 minutes ago   Created                                                             mycontainer
[root@mufeng41 ~]# 

2. docker start 可以运行容器

[root@mufeng41 ~]# docker start mycontainer
mycontainer
[root@mufeng41 ~]# docker ps |grep nginx
934352be273e   nginx       "/docker-entrypoint.…"   4 minutes ago   Up 6 seconds   80/tcp                                                 mycontainer
[root@mufeng41 ~]# 

3. 使用docker run命令可以直接创建容器并启动

[root@mufeng41 ~]# docker run -d --name  nginx_mufenggrow  nginx
d319b233db2a2c623e1309a7b08b0de6ac64c215f08fbd813879854721a3a0c4
[root@mufeng41 ~]# docker ps |grep nginx_mufenggrow
d319b233db2a   nginx       "/docker-entrypoint.…"   11 seconds ago   Up 10 seconds       80/tcp                                                 nginx_mufenggrow
[root@mufeng41 ~]# 


  • docker run:用于在Docker中运行容器的命令。
  • -d:该选项表示容器将以后台模式(detached mode)运行,即在后台运行而不附加到终端。
  • –name nginx_mufenggrow:这是为容器指定一个自定义的名称,即"nginx_mufenggrow"。
  • nginx:这是要使用的Nginx镜像的名称。Docker会从镜像仓库中拉取该镜像并在该容器上运行。

4. docker exec 可以进入容器内

[root@mufeng41 ~]# docker exec -it nginx_mufenggrow /bin/bash
root@d319b233db2a:/# ls
bin   dev		   docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc			 lib   media  opt  root  sbin  sys  usr
root@d319b233db2a:/# 

-i : 为docker打开标准输入
-t: 为docker分配一个伪中端

5. docker rm -f 删除某个容器

[root@mufeng41 ~]# docker rm  -f nginx_mufenggrow
nginx_mufenggrow

[root@mufeng41 ~]# docker ps |grep nginx_mufenggrow
[root@mufeng41 ~]# 

如果容器还在运行,无法删除,需要加-f参数,也可以先停止在用docker rm

停止:docker stop 容器名

6. docker export 导出为文件

docker export命令用于将容器导出为一个文件,该文件包含容器的文件系统内容和元数据,但不包含容器的运行状态。

语法:

docker export [OPTIONS] CONTAINER_ID/CONTAINER_NAME

其中:

  • OPTIONS:可选参数,用于指定导出时的选项。
  • CONTAINER_ID/CONTAINER_NAME:要导出的容器的ID或名称。

一些常用的选项包括:

-o, --output:指定导出的文件路径和名称。
–change:应用 Dockerfile 中的指令,用于定制导出的容器。

案例: 将一个名字为MySQL的容器使用docker export导出 为 mysql_mufenggrow.tar

[root@mufeng41 ~]# docker export -o mysql_mufenggrow.tar mysql
[root@mufeng41 ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  mysql_mufenggrow.tar  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@mufeng41 ~]# 

7. docker import

docker import命令用于将文件系统存储为Docker镜像。它可以将先前使用docker export导出的容器文件或其他文件导入为新的Docker镜像。

语法:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

其中:

  • OPTIONS:可选参数,用于指定导入时的选项。
  • file|URL|-:要导入的文件路径、URL或使用-表示从标准输入流导入。
  • REPOSITORY[:TAG]:导入的新Docker镜像的仓库名称和标签。

一些常用的选项包括:

–change:应用 Dockerfile 中的指令,用于定制导入的镜像。

示范案例:

  • 创建个新环境
·`[root@mufeng41 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@mufeng41 ~]# 

可以看到什么都没有。

接下来我们把 mysql_mufenggrow.tar 重新导入镜像并开机

root@mufeng41 ~]# docker import mysql_mufenggrow.tar mysql_mufenggrow
sha256:06bfcd68bd0e74599d5e4cedf077a760150453b91bad57261308ead6bcf09703
[root@mufeng41 ~]# docker images;
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
mysql_mufenggrow   latest    06bfcd68bd0e   6 seconds ago   442MB

可以看到生成了一个mysql_mufenggrow的镜像,接下来我们用这个镜像生成容器

[root@mufeng41 ~]# docker run -it  --name mysql -e MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 -d mysql_mufenggrow /bin/bash
7267c237c5accbe424106648bdcfd614743c3f008eef46dc0e7e43a922dcdb49
[root@mufeng41 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND       CREATED         STATUS        PORTS                                       NAMES
7267c237c5ac   mysql_mufenggrow   "/bin/bash"   2 seconds ago   Up 1 second   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql

使用场景:

主要用来制作基础镜像,比如从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后把这个镜像分发给其他人使用,作为基础的开发环境。

需要注意的是:

  • 会丢弃历史记录和元数据
  • 启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错
  • docker export导出的镜像是不带历史记录的,如果原本的镜像有3层,export之后只会有1层,这一层为从镜像运行到export之间对文件系统的修改
  • 可以使用docker history ImageName/ImageID 查看镜像,只有一层

总结

docker 容器的基本操作,主要是上面的 几个命令,掌握基础操作之后,我们就开始进入到docker 容器的学习了,我们下一篇文章再见。

记得操练下哦。

你可能感兴趣的:(#,1,-,容器管理,docker,云原生,容器)