目录
帮助命令
镜像命令
拉取镜像
保存镜像
导入镜像
容器命令
运行容器
停止容器
启动停止的容器
删除容器
查看容器信息
查看运行中的容器信息
查看所有容器的信息
容器日志
进入容器
数据卷命令
创建数据卷
查看所有数据卷
查看数据卷详细信息
删除数据卷
删除所有未使用的数据卷
编辑
挂载
1.数据卷在挂载前已经存在时
2.数据卷在挂载前不存在
3.挂载宿主机指定目录
创建新镜像
根据容器创建新镜像
根据dockerfile文件生成新镜像
帮助命令
查看所有docker 命令的帮助信息
docker --help
查看某一个命令的帮助信息
docker save --help
镜像命令
首先来看下镜像的名称组成:
- 镜名称一般分两部分组成:[repository]:[tag]。
- 在没有指定tag时,默认是latest,代表最新版本的镜像
这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。
拉取镜像
1)首先去镜像仓库搜索nginx镜像,比如 Docker Hub
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
容器命令
容器保护三个状态:
- 运行:进程正常运行
- 暂停:进程暂停,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 start
后面跟着参数 可以是容器ID或者name,都可以停止
删除容器
docker rm
后面跟着参数 可以是容器ID或者name,都可以停止
注意 rm 默认只能删除 非运行中的容器,如果需要删除正在运行的容器,可以先停止在删除,也可以强制删除
docker rm -f
查看容器信息
查看运行中的容器信息
docker ps
查看所有容器的信息
docker ps -a
除了可以查看到运行中容器,也可以查看到停止的容器信息
容器日志
docker logs [OPTIONS] CONTAINER
-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进入容器内部,因为没有编辑器,修改文件很复杂
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
这样,我们操作宿主机的/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
可以看到,我们创建的html这个数据卷关联的宿主机目为/var/lib/docker/volumes/html/_data
目录。
删除数据卷
docker volume rm [数据卷名称]
删除所有未使用的数据卷
docker volume prune
挂载
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