目录
帮助命令
查看所有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