Docker 命令操作

时间:2022-10-03 09:56:51

目录

帮助命令

镜像命令

 拉取镜像

保存镜像

导入镜像

 容器命令

运行容器

停止容器

 启动停止的容器

删除容器

查看容器信息

查看运行中的容器信息

 查看所有容器的信息

容器日志

进入容器

数据卷命令

创建数据卷

查看所有数据卷

查看数据卷详细信息

 删除数据卷

删除所有未使用的数据卷

 ​编辑

挂载

1.数据卷在挂载前已经存在时

2.数据卷在挂载前不存在

3.挂载宿主机指定目录

创建新镜像

根据容器创建新镜像

根据dockerfile文件生成新镜像


帮助命令

查看所有docker 命令的帮助信息

docker --help

查看某一个命令的帮助信息

docker save --help

镜像命令

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

  • 镜名称一般分两部分组成:[repository]:[tag]。

  • 在没有指定tag时,默认是latest,代表最新版本的镜像

Docker 命令操作

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

Docker 命令操作

 拉取镜像

1)首先去镜像仓库搜索nginx镜像,比如 Docker Hub

Docker 命令操作

 2)根据查看到的镜像名称,拉取自己需要的镜像,

docker pull nginx

当不带tag时,默认拉取latest版本

保存镜像

将本地的一个镜像保存成文件,该文件既可以导出磁盘供其他人使用,使用load命令可以把加载该镜像文件

docker save -o [保存的目标文件名称] [镜像名称]

例如:docker save -o nginx.tar nginx:latest

导入镜像

当使用save命令保存的镜像文件,可以使用load命令加载它

docker load -i [目标文件名称]

例如:docker load -i nginx.tar

 容器命令

Docker 命令操作

容器保护三个状态:

  • 运行:进程正常运行

  • 暂停:进程暂停,CPU不再运行,并不释放内存

  • 停止:进程终止,回收进程占用的内存、CPU等资源

其中:

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

运行容器

docker run 

创建并运行nginx容器的命令:

docker run --name mn -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器

  • --name : 给容器起一个名字,比如叫做mn

  • -p :将宿主机端口容器端口映射,冒号左侧是宿主机端口,右侧是容器端口

  • -d:后台运行容器

  • nginx:镜像名称,例如nginx(没带tag默认是latest)

-p 是将容器端口映射到宿主机端口。默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80。

停止容器

docker stop

后面跟着参数  可以是容器ID或者name,都可以停止

例如:docker stop mn

Docker 命令操作

 启动停止的容器

docker start

后面跟着参数  可以是容器ID或者name,都可以停止

删除容器

docker rm

后面跟着参数  可以是容器ID或者name,都可以停止

注意 rm 默认只能删除 非运行中的容器,如果需要删除正在运行的容器,可以先停止在删除,也可以强制删除

docker rm -f

查看容器信息

查看运行中的容器信息

docker ps

Docker 命令操作

 查看所有容器的信息

docker ps -a

除了可以查看到运行中容器,也可以查看到停止的容器信息

容器日志

docker logs [OPTIONS] CONTAINER

Docker 命令操作

 -f : 持续输出

-n:显示行数

-t :显示时间戳

例如:docker logs -f -n 20 -t mn

进入容器

docker exec -it [容器名] [要执行的命令]

例如 : docker exec -it mn bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • mn :要进入的容器的名称

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

注意:exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的

数据卷命令

使用docker exec进入容器内部,因为没有编辑器,修改文件很复杂

Docker 命令操作

 数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

Docker 命令操作

 一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

创建数据卷

docker volume create [数据卷名称]

例如: docker volume create html

查看所有数据卷

docker volume ls

查看数据卷详细信息

包含关联的宿主机目录位置

docker volume inspect [数据卷名称]

例如: docker volume inspect html

Docker 命令操作

 可以看到,我们创建的html这个数据卷关联的宿主机目为/var/lib/docker/volumes/html/_data目录。

 删除数据卷

docker volume rm [数据卷名称]

删除所有未使用的数据卷

docker volume prune

 Docker 命令操作

挂载

1.数据卷在挂载前已经存在时

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下

创建数据卷
[root@192 ~]# docker volume create html
html
查看数据卷详细信息
[root@192 ~]# docker volume inspect html
[
    {
        "CreatedAt": "2022-10-01T16:04:03+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/html/_data",
        "Name": "html",
        "Options": {},
        "Scope": "local"
    }
]

先创建数据卷在查看数据卷在宿主机对应的位置

创建容器并挂载数据卷到容器内的html目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

这样就可以在宿主机的 /var/lib/docker/volumes/html/_data/ 目录下访问到nginx容器内部的/usr/share/nginx/html的目录了。

2.数据卷在挂载前不存在

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

在挂载时数据卷不存在,则docker会帮我们创建html数据卷,并进行挂载。具体宿主机目录使用

docker volume inspect html进行查询 

3.挂载宿主机指定目录

语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]

  • -v [宿主机文件]:[容器内文件]

docker run \
-p 3306:3306 \
--name mysql \
-v /home/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /home/mysql/data:/var/lib/mysql \
--privileged=true  \
-e MYSQL_ROOT_PASSWORD=root \
-d \
mysql:5.7.25

第一个 -v 将宿主机的文件,映射到 容器内的目录下的文件

第二个 -v 将宿主机目录,挂载到容器内目录

创建新镜像

根据容器创建新镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • -a :提交的镜像作者;

  • -m :提交时的说明文字;

  • -p :在commit时,将容器暂停。

例子:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mymysql             v1                  37af1236adef        15 seconds ago      329 MB

根据dockerfile文件生成新镜像

docker build 命令用于使用 Dockerfile 创建镜像。

实例1:使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。

docker build -t runoob/ubuntu:v1 . 

实例2:使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。

docker build github.com/creack/docker-firefox

实例2:可以通过 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .

注意:

在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:

$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD