1.镜像
1.1 远程仓库
Docker远程仓库 访问https://hub.docker.com/
,类似于GitHub,上边存放各种软件各个版本的镜像。访问官网,搜索框中搜索Python或者其他查看镜像,一般使用官方提供的镜像,如下图;
点击进入后,点击Tags,界面中出现不同版本,不同的拉取指令。
拉取镜像时,找到自己需要的版本,可以在搜索框中加入关键字进行搜索,然后拉取对应的镜像。
1.2 搜索官方仓库镜像
docker search 镜像名称
docker search 镜像名称:tag
docker search centos
docker search centos:centos7
—console—
列表说明
参数 | 说明 |
---|---|
NAME | 镜像名称 |
DESCRIPTION | 镜像说明 |
STARS | 点赞数量 |
OFFICIAL | 是否是官方的 |
AUTOMATED | 是否是自动构建的 |
1.3 镜像拉取
# 拉取指定tag的镜像,tag需要在docker远程仓库中查找到对应的
docker pull 镜像名称:镜像标签
# 不加tag时,拉取为镜像最新版本
docker pull 镜像名称
# 例子
docker pull python:3.6 # 拉取Python且tag为3.6的
docker pull python # 拉取最新版本的Python
拉取第三方镜像
docker pull 192.168.0.185:5000/mysql
1.4 查看所有镜像
# 查看本地拉取的所有镜像
docker images
第一列为镜像名称,第二列为镜像的版本,第三列为镜像id,第四列是镜像创建时间,第五列是镜像的大小。
1.5 查看镜像信息
docker inspect 镜像名称/id:镜像标签
docker inspect python
docker inspect python:latest
docker inspect a5d79:latest
# 上方三条指令输出结果都相同,使用其中之一即可。
1.6 删除镜像
# 删除镜像 需要容器中不存在基于该镜像生成的容器
docker rmi 镜像名称/id:镜像标签
# 强制删除
docker rmi -f 镜像名称/id:镜像标签
1.7 运行官方镜像
输入命令docker run hello-world
,等待片刻后,console中输出下面内容,此时代表docker安装完成且已正常启动。
解释:
当输入docker run hello-world时,docker做了以下几件事
- 检查本地是否有hello-world镜像
- 发现本地没有hello-world镜像,去docker远程仓库拉取hello-world镜像
- 拉取完成后,运行hello-world镜像
1.8 镜像备份
# 通过以下命令将镜像保存为tar文件
docker save -o 压缩包名称 镜像名称/id:tag
docker save -o mysql.tar mysql:5.7
1.9 恢复镜像
docker load -i 压缩包文件
docker load -i mysql.tar
—console—
2.容器操作
2.1 容器创建启动两步走(不常用)
# 创建出centos容器并重命名为centos
docker create --name=centos centos:centos7
# 启动这个容器
docker start centos
—console—
2.2 最简单运行一个容器
# docker run 镜像名称/id:tag 不写tag默认使用最新
docker run nginx
2.3 快速创建和启动一个容器
容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!
docker run python:3.6 /usr/bin/sleep 20;
2.4 运行一个完整的容器命令以及参数解释
docker run 参数1 参数2 镜像名称:tag
如
docker run -di --name=centos -v /home/:/home centos:centos7
# 通过centos:centos7镜像创建出容器,并在后台运行、名字为centos、将宿主机的目录映射home目录到容器内部的/home路径下
参数解释
参数 | 详解 |
---|---|
-i | 表示运行容器 |
-t | 表示容器启动后会进入其命令行,加入这个参数后,容器创建就能登录进去,即分配一个伪终端 |
-v | 表示目录映射关系(前者是宿主机目录,后者容器目录,是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 |
-d | 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登陆容器,如果只加-i -t两个参数,创建后就会自动进去容器) |
p | 表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射。 |
–name | 为创建的容器命名,如果不写,会自动分配一个名称 |
-e | 指定内部环境变量,向容器的环境变量中加了一个key value,mysql在启动的时候,设置了用户的root密码 |
PS:当本地没有对应镜像的时候,会去官网拉取指定版本。不加后缀会拉最新的。
demo
- docker run -it --name=myredis redis 运行容器并进入到容器中,分配一个伪终端做交互
- docker run -it --name=mycentos1 centos:centos7 运行centos容器,并进入到伪终端
- docker run -di --name=mycentos2 centos:centos7 运行一个centos7容器,并在后台运行
2.5 查看正在运行的容器和所有容器
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
2.6 容器的启动、停止及重启
# 启动
docker start 容器名称/id
# 停止
docker stop 容器名称/id
# 重启
docker restart 容器名称/id
2.7 进入容器伪方法
# 参数:-it 可交互终端
docker exec -it 容器名称:id 指令
docker exec -it centos /bin/bash
# 通过exit退出容器伪终端
exit
2.8 启动时进行端口映射
# 通过参数-p 进行端口映射
docker run -p 宿主机端口:容器端口 镜像名称/id
docker run -di --name=redis -p 5555:6379 redis
# 查看redis是否运行
docker ps
# 通过远程连接映射端口5555连接redis
redis-cli -h 10.0.0.100 -p 5555
—console—
2.9 文件拷贝
# 拷贝文件时,容器不在运行也能进行拷贝
# 1 从宿主机拷贝到容器内部
docker cp 需要拷贝的文件或目录 容器名称/ID:容器目录
docker cp /home/demo.txt redis:/home
# 2 从容器内部拷贝到宿主机
# 在宿主机中运行而不是在容器中运行
docker cp 容器名称/ID:容器目录 需要拷贝的文件或目录
docker cp redis:/home /home/test/
2.10 目录挂载
# 前提 需要在创建容器的时候进行此操作,已经运行起来的容器不支持此操作
# 将本地lqz目录和容器中的home路径进行挂载(可以理解为同步的意思)
docker run -di -v /home/test:/home --name=mycentos99 centos:centos7
2.11 查看容器IP地址
# 方式一 docker inspect 容器名称/id
# 然后在console中查找ip
# 方式二
# 进入到容器中输入ifconfig指令查看ip 如果没有指令需要安装软件才能查看
docker exec -it 容器名称/id ip指令
# 方式三
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/id
docker inspect --format='{{.NetworkSettings.IPAddress}}' b1d49b184e38
2.12 删除容器
# 再运行的不能删除
docker rm 容器名称/id
# 强行删除
docker rm -f 容器名称/id
# 删除所有容器(谨慎操作)
docker rm `docker ps -a -q`
2.13 容器保存为镜像
docker commit 容器名字 镜像名字
docker commit python3 mydjango
docker commit 0f33e48ffe99 mydjango
# 查看镜像是否保存成功
docker images