【教程】docker快速学习
备注
2023/2/18 星期六
最近在部署一些软件的时候总是用到docker技术,准备在这里花一点时间总结一下。
一、基本概念
1.docker
docker是一个开源的容器引擎,为的是规避程序运行的环境不同带来的问题,主要使用golang开发。
2.安装
docker可以通过在官网下载安装包也可以使用官网提供的命令进行安装
centos系列使用:
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
debain系列使用:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.概念
- 镜像: 镜像是打包好的具有软件和运行环境的集合,但是不可以直接运行,必须实例化之后才可以运行
- 容器: 容器是镜像在本地的实例化,同一个镜像可以生成多个容器,每个容器相互独立,每个容器都可以创建,启动,停止,删除。
- 仓库: 仓库是docker用来保存镜像文件的地方
4.源地址
一般在国内使用docker会网络会比较慢,我们可以通过换源的方式来解决
# 编辑daemon文件
vim /etc/docker/daemon.json
# 写入源(docker中国、中科大、网易、阿里云)
{
"registry-mirrors" : [
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"http://cr.console.aliyun.com/"
]
}
#重新加载配置和重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
5.系统命令
- 启动: systemctl start docker
- 状态: systemctl status docker
- 停止: systemclt stop docker
- 重启: systemclt restart docker
- 开机自启: systemclt enable docker
二、常用命令
1.镜像命令
- 查看镜像列表: docker images
- 从仓库搜索: docker search [名称]
- 从仓库下载: docker pull [名称:版本号]
- 删除镜像: docker rmi [名称/ID]
2.容器命令
- 查看运行中的容器: docker ps
- 查看所有容器: docker ps -a
- 创建容器: docker run -参数
- 启动容器: docker start [名称/id]
- 进入容器: docker exec [名称/id]
- 停止容器: docker stop [名称/id]
- 删除容器: docker rm [名称/id]
- 查看容器信息: docker inspect [名称/id]
docker run命令常用参数列表
名称 | 作用 |
---|---|
-i | 立即启动容器且保持容器运行 |
-t | 容器启动后前台运行(分配一个终端) |
-d | 容器启动后默认后台运行 |
- -name [名称] | 为容器命名 |
-id | 立即启动并进入容器终端 |
-it | 立即启动但后台运行容器 |
-p | 端口映射 |
-v | 数据卷 |
三、数据卷
1.数据卷概念
因为容器与宿主机是相互隔离的关系,为了实现容器和宿主机的文件交换,我们会使用到容器卷。我们通过将宿主机的文件夹和容器中的文件夹进行链接可以实现两个文件夹的内容同步,即使容器被删除之后,宿主机文件夹中的内容也依然存在。同时,通过这一操作可以实现容器之间的数据交换。
2.使用方法
只要在启动时将容器的目录挂在到容器上即可
docker run -v [宿主机目录]:[容器目录]
注:挂载数据卷必须使用绝对路径
四、容器和镜像
1.镜像概念
由于不同的Linux发行版使用的相同的内核,所以docker可以直接使用宿主机的内核作为自己的系统内核,再在内核上面构建需要的Linux发行版镜像(centos、debain、ubuntu),然后就可以再这个系统上运行不同的镜像了,当一个镜像会用到其他镜像时,dokcer就会自动拉取这个镜像所依赖的镜像。但是当我们需要拉取的镜像文件所依赖的镜像已经在本地存在时,docker就可以复用已经有的依赖镜像,如:当我们拉取tomcat镜像时,cocker会拉取jdk镜像和tomcat镜像,我们继续拉取hadoop的时候,因为已经拉取了jdk的镜像,docker就不会再拉取jdk的镜像了。总的来说,docker的镜像就是一个层层叠加的文件系统。
2.转换命令
当我们想把我们自己的容器转换成为可以给别人使用的镜像时可以使用以下命令
docker commit [容器id] [镜像名称:版本号]
当我们想要将镜像发送给其他人时可以用以下命令将镜像转换成压缩文件
docker save -o [压缩文件名称] [镜像名称:版本号]
当我们想要从压缩文件中加载镜像时可以使用以下命令
docker load -i [压缩文件名称]
3.dockerfile
由于镜像文件的发送还是有很多不方便的地方,docker还为我们提供了一种更加好用的制作镜像的方式叫做dockerfile,dockerfile是一个由指令构成的文本文件,只要让docker加载一个dockerfile就可以很容易构建出想要的镜像文件了
dockerfile的命令格式如下:
命令 | 功能 |
---|---|
FROM | 指定这个dcokerfile基于的镜像 |
MAINTAINER | 作者信息 |
RUN | 在容器创建的时候执行的命令 |
CMD | 在容器启动时执行的命令 |
ADD | 在镜像中添加文件 |
COPY | 在镜像中添加本地文件 |
VOLUME | 添加数据卷 |
EXPOSE | 暴露端口 |
WORKDIR | 指定工作目录 |
USER | 指定启动容器的用户 |
五、docker-compose
docker为我们提供的服务编排功能,可以方便的批量管理容器,其中最常见的就是使用docker-compose工具,我们只要通过固定的步骤就可以完成对大量容器的管理工作。
流程如下:
1.使用dockerfile创建镜像
2.编写docker-compose.yml定义各容器的规则
3.使用docker-compose up命令启动容器
docker-compose.yml文件的编写规则如下:
version:'[版本号]'
servises:
[服务名称1]:
image:[镜像名称]
ports:
-[宿主机端口]:[容器端口]
links:
-[要访问的程序名称]
volumes:
-[宿主机目录]:[容器目录]
[服务名称2]:
image:[镜像名称]
ports:
-[宿主机端口]:[容器端口]
links:
-[要访问的程序名称]
volumes:
-[宿主机目录]:[容器目录]
[服务名称3]:
...