认识Docker
Docker是什么
Docter是一个用于构建、运行和管理容器的软件框架
利用Docter可以快速传送、测试和部署代码
容器是什么
可以将容器看成一个盒子,把软件 和软件依赖的各项服务统一的打包到容器中。
对于开发:不用考虑跨平台的细节问题
对于测试:不用纠结测试环境和开发环境是否一致
对于运维:不用关心各种语言的细节
搭建Docker环境
可以购买ubuntu + docker配置的云服务器
Docker的技术体系
Docker本质是一个C/S软件,docker发送指令,dockerhost接收和执行指令。
仓库:存放镜像
镜像:启动容器
容器:运行软件
Docker常用命令
免sudo操作
如果使用docker命令提示权限不足,可以选择在命令前加上sudo,或者可以执行一下免sudo操作。
命令如下:
bash
sudo groupadd docker # 创建新用户组
sudo usermod -aG docker $USER # 当前用户加入用户组
newgrp docker # 刷新用户组权限
列出所有Docker命令
docter --help
查看某个命令的详解
命令 --help
给出该命令及其参数使用的详解
如:
docker image --help
docker image ls --help
1. 镜像
所有的镜像命令及其说明
docker image --help
XML
Commands:
build 根据Dockerdfile 构建镜像
history 查看镜像构建步骤
import 把一个容器的文件系统,导入为镜像
inspect 查看镜像信息
load 导入镜像
ls 查了镜像
prune 删除未使用镜像
pull 从仓库拉取镜像
push 把镜像推送到仓库
rm 删除镜像
save 导出镜像
tag 给镜像打tag,
常见命令举例
XML
docker image pull hello-world # 从仓库种拉取镜像
docker image ls # 查看本地所有的镜像
docker image tag hello-world:latest abc:b.0.0.1 # 为镜像设置名字和tag
docker image rm hello-world:latest # 根据名字删除镜像
docker image rm d2c94e258dcb # 根据id 删除镜像
docker image save abc:v.0.0.1 -o abc.img # 导出镜像
docker image load -i abc.img # 导入镜像
- 从仓库中拉取镜像hello-world
docker image pull hello-world
解释:docker image pull 镜像名
- 查看本地所有镜像
docker image ls
- 为hello-world镜像设置名字和tag
docker image tag hello-world:latest abc:b.0.0.1
解释:hello-world:latest 是被设置镜像的名字和tag,中间用**:** 隔开,如下图所示:
后面的abc:v.0.0.1是设置的新的名字和tag,中间用 : 隔开
命令执行后使用docker image ls命令查看结果如下:
可以看到多了一个名为abc、tag为v.0.0.1 且 镜像ID和hello-world相同的镜像
- 根据镜像名删除hello-world镜像
docker image rm hello-world:latest
解释:hello-world:latest 表示要删除的镜像名:镜像tag
如果要删除的是最新的版本,也可以只写docker image rm hello-world
命令执行后使用docker image ls命令查看结果如下:
- 根据镜像ID删除镜像abc
docker image rm d2c94e258dcb
解释:rm后面填写要删除的镜像ID
注意:正在运行或者有多个相同ID的镜像无法直接通过此方法删除。如果仍然要删除可以在rm后添加-f参数
- 导出名为abc的镜像(先将hello-world和abc镜像重新创建)
docker image save abc:v.0.0.1 -o abc.img
解释:docker image save 镜像名:镜像tag -o 导出的文件名(自拟,随意起名,如:aaa)
最后使用docker image rm -f d2c94e258dcb删除hello-world和abc两个镜像
- 将上一步导出的abc.img导入到镜像中
docker image load -i abc.img
解释:docker image load -i 要导入的文件名
2. 网络
默认情况下,容器之间是不联网的
如果容器直接需要通信,需要使用同一个网络
所有的网络命令及其说明
docker network --help
XML
Commands:
connect 让容器加入指定的网络
create 创建网络
disconnect 让容器退出指定的网络
inspect 查看指定网络信息
ls 列出所有网络
prune 移除未使用的网络
rm 移除指定的网络
常见命令举例
XML
docker network create abc_net # 创建网络
docker network rm abc_net # 删除网络
- 创建网络,网络名为abc_net
docker network create abc_net
解释:docker network create 网络名
- 删除网络abc_net
docker network rm abc_net
解释:docket network rm 网络名
3. 容器(重要)
所有的容器命令及其说明
XML
Commands:
attach 将本地的输入输出,附加到容器中
commit 根据容器及其修改,创建新的镜像
cp 容器和服务器之间,文件传输
create 创建新的容器(不运行)
diff Inspect changes to files or directories on a container's filesystem
exec 在运行中的容器里,执行命令
export 把容器的文件系统,导出
inspect 查看容器信息
kill 强行停止运行中的容器
logs 显式容器的执行日志
ls 列出容器
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart 重启容器
rm 删除容器
run 创建并启动(重要)
start 启动容器
stats 查看容器状态
stop 停止容器
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
常用的命令:
创建容器:create
启动容器:start
停止容器:stop
删除容器:rm
创建并启动容器:run = create + start
重启容器:restart = stop + start
常见命令举例
- run命令-创建并执行容器
(1)先添加一个mysql镜像,命令如下:docker image pull mysql:5.7
(2)对mysql:5.7镜像启动为容器
docker container run --name abc_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
XML
docker container run
--name abc_mysql # 容器的名字(自定义)
-e MYSQL_ROOT_PASSWORD=123456 # 需要传递的参数
mysql:5.7 # 镜像名
参数部分语法(更多的参数在后面的步骤):-e 参数名=参数内容
若参数有多个,则需要传入多个-e,如:-e a=1 -e b=2
出现如下内容说明容器已执行
- stop、kill命令-停止容器
上面的状态无法通过ctrl+c停止,若想停止容器,可以开启新的窗口执行如下命令:
(1)停止容器:docker container stop abc_mysql
(2)强制停止容器:docker container kill abc_mysql
任意一个都可以停止容器
- ls - 查看所有容器
docker container ls -a
解释:-a表示查看所有容器
- start - 开启容器
docker container start abc_mysql
- 删除此容器
docker container rm abc_mysql
若此容器正在运行可以使用-f参数:
docker container rm abc_mysql -f
- 使用更多参数的run命令
XML
docker container run
--name abc_mysql # 容器名
-e MYSQL_ROOT_PASSWORD=123456 # 容器参数
-p 3306:3306 # 端口映射(如果此容器需要网络连接则添加)
-d # 后台运行
--volume /home/ubuntu/data:/var/lib/mysql # 将容器和主机的文件进行映射
--volume /home/ubuntu/conf:/etc/mysql/conf.d # 将容器和主机的文件进行映射
mysql:5.7 # 指定镜像
- 在容器内执行命令
docker container exec abc_mysql ls /etc/mysql
解释:docker container exec 容器名 命令