镜像命令
docker images
-
docker images
: 查看本地的所有镜像 - 后面可以跟的常用参数有 :
-a : 列出所有的镜像
-
-q : 只显示镜像 id
REPOSITORY : 镜像的仓库源
TAG : 镜像的标签
TMAGE ID : 镜像的 id
CREATED : 镜像的创建时间
SIZE : 镜像的大小
docker search
-
docker search
: 搜索镜像 -
docker search mysql --filter=STARS=3000
: 搜索 MySQL 镜像 stars 超过 3000 的镜像
docker pull
-
docker pull 镜像名称:[tag版本]
: 下载镜像, 默认下载最新版
docker rmi
-
docker rmi -f 镜像id
: 删除指定镜像, 如果要删除多个镜像, 则每个镜像 id 之间用空格隔开 -
docker rmi -f $(docker images -aq)
: 删除所有的镜像
容器命令
- 有了镜像后才可以创建容器
新建容器并启动
docker run [可选参数] 镜像id
-
参数:
- --name="容器名称"
- -d : 以后台方式运行
- -it : 进入到容器内部, 常用的是:
docker run -it centos /bin/bash
- -p : 指定容器端口
- -p ip:主机端口:容器端口
- -p 主机端口:容器端口
- -p 容器端口
- 容器端口
- -P : 随机指定端口
- -e : 环境配置, 如配置 MySQL 密码
退出容器
exit
: 退出并关闭容器command + p + q
: 退出但是不关闭容器
查看正在运行中的容器
docker ps
-
docker ps -a
: 查看正在运行的容器和曾经运行过的容器 -
docker ps -n=3
: 显示最近新建的 3 个容器 -
docker ps -q
: 只显示容器的编号
删除容器
-
docker rm 容器id
: 删除指定的容器, 不能删除正在运行的容器, 如果想要删除正在运行的, 可以使用 rm -f -
docker rm -f $(docker ps -aq)
: 删除所有的容器 -
docker ps -a -q|xargs docker rm
: 删除所有的容器
启动容器
docker start 容器id
重启容器
docker restart 容器id
停止正在运行的容器
docker stop 容器id
强制停止正在运行的容器
docker kill 容器id
其他常用命令
常看日志
docker logs -tf 容器id
: 查看指定容器的日志docker logs -tf --tail 10 容器id
: 查看指定容器的最近 10 条的日志
查看容器的进程信息
docker top 容器id
查看镜像的元数据
docker inspect 镜像id
进入当前正在运行的容器
-
docker exec -it 容器id /bin/bash
: 进入容器后新开启一个终端, 可以在里面进行一些操作 (常用) -
docker attach 容器id
: 进入当前正在执行的终端
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
查看 CPU 状态
docker stats
增加 tag
docker tag 镜像id 镜像名称:版本号
commit 镜像
docker commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[版本]
数据卷
查看所有的数据卷
docker volume ls
- 可以使用
docker inspect 容器id
来查看是否挂载成功, 在显示的信息中查看 Mounts 部分的内容
指定路径挂载
docker run -it -v 主机目录:容器内目录 镜像名称 /bin/bash
匿名挂载
docker run -it -v 容器内目录 镜像名称
具名挂载
大多数情况下都使用的是具名挂载
docker run -it -v 随便起的名字:容器内目录 镜像名称
docker run -it -v 随便起的名字:容器内目录:ro 镜像名称
: 其中 ro 表示的是只能读, read only, 表示的是不能在容器内部进行修改, 只能通过宿主机来修改docker run -it -v 随便起的名字:容器内目录:rw 镜像名称
: 其中 rw 表示的是可读可写, read write (默认的)
使用 dockerfile 来挂载
-
案例:
touch dockerfile
-
vim dockerfile
FROM centos VOLUME ['volume01', 'volume02'] CMD echo '====end======' CMD /bin/bash
-
docker build -f dockerfile -t xiaosheng/centos .
- -f : 表示 dockerfile 文件的路径
- -t : 表示要生成的镜像名称
- . : 表示要生成在哪个目录下
最后可以使用
docker inspect 镜像id
来查看数据卷的详细信息
查看指定数据卷对应的目录
docker volume inspect 具名挂载时起的名字
- 当挂载数据卷并且没有指定路径的时候,
Linux
中一般都是挂载在/var/lib/docker/volume
目录中
配置 MySQL
docker run -d -p 3306:3306 -v /home/mysql/my.conf:/etc/mysql/my.conf -v /home/mysql/data:/use/local/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
- -e 可以用来配置 MySQL 密码, 可以同时挂载多个数据卷
数据卷容器
可以在多个容器之间共享数据
-
案例
先开启一个 nginx01 的容器
-
然后需要再开启一个 nginx02 的容器, 同时这两个容器之间需要数据共享, 那就在开启 nginx02 的时候就可以使用以下命令:
docker run -it --name nginx02 --volumes-from nginx01 xiaosheng/centos
同时还可以有其他的容器来和 nginx01 一起共享数据
即便 nginx01 容器关掉或者销毁, 并不会影响到其他容器中共享的数据
只要还有一个容器在使用, 那么数据就不会消失
Dockerfile
- dockerfile 是用来构建 docker 镜像的文件
步骤 :
- 编写 dockerfile 文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像 (可以发布到 dockerhub 或者是 阿里云镜像仓库)
dockerfile 文件
每一个保留关键字 (指令) 都必须是大写
从上往下开始执行
# 表示注释
每一个指令都会创建一个镜像层
-
常用指令:
FROM # 基础镜像 MAINTAINER # 镜像作者, 一般是姓名<邮箱> RUN # 构建镜像的时候需要运行的命令 ADD # 构建镜像的时候, 需要添加的内容, 比如要在 centos 镜像中添加一个 NGINX, 如果添加的是一个压缩包的话, 会自动解压 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 端口配置 CMD # 容器启动的时候需要运行的命令, 只有最后一个会生效, 这个最后一个生效, 并不是指在 dockerfile 文件中, 在 dockerfile 文件中仍然可以有多个 CMD 命令, 指的是在使用 docker run 的时候, 后面不能加命令, 如果加了, 那么 docker run 后面的命令将会替换掉 dockerfile 文件中的命令 ENTRYPOINT # 容器启动的时候需要运行的命令, 可以追加命令 ONBUILD # 当构建一个被继承的 dockerfile 的时候, 会运行 ONBUILD 指令 COPY # 将文件拷贝到镜像中 ENV # 构建的时候设置环境变量
-
案例 (尝试构建自己的 centos)
-
编写 dockerfile 文件
FROM centos # 基础镜像是 centos MAINTAINER xiaosheng<1029739052@qq.com> # 作者信息 ENV MYPATH /usr/local # 自定义一个变量 MYPATH, 值是 /usr/local WORKDIR $MYPATH # 指定工作目录, 即用户当进去 centos 后所在的目录 RUN yum -y install vim # 安装 vim RUN yum -y install net-tools # 安装 net-tools EXPOSE 80 # 暴露端口 CMD echo $MYPATH CMD echo "===end====" CMD /bin/bash
-
开始构建
docker build -f dockerfile文件的地址 -t 镜像名:[版本号]
使用
docker history 镜像id
来查看镜像的构建历史
-
发布镜像
发布到 dockerhub
- 注册一个 dockerhub 的账号
-
docker login -u 用户名
, 然后输入密码 docker push 用户名(随便起的)/镜像名:版本号
发布到阿里云
可以先将 docker 的镜像更换成自己的阿里云中提供的镜像地址
登录阿里云, 进入容器镜像
创建命名空间和镜像仓库, 创建仓库的时候选择本地仓库