Docker入门到入门(一)
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker架构,Docker包括三个基本概念:
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker安装
1.安装环境
当前操作在Linux环境进行安装
2.安装
2.1 安装运行
2.1.1 使用Yum源安装
# 把yum包更新到最新
sudo yum update
# 设置yum仓库源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看是否已安装docker
yum list installed | grep docker
# 安装 Docker(new)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 安装docker
yum install docker -ce
# 查看安装后版本
docker version
2.1.2 启动docker
# 开机自启
sudo systemctl enable docker
# 启动docker服务
sudo systemctl start docker
# 停止docker服务
sudo systemctl stop docker
# 查看docker状态
systemctl status docker
# 查看docker概要信息
docker info
启动报错
运行: sudo systemctl start docker
报错: Failed to start docker.service: Unit docker.service not found.
可以按照如下方式重新安装:
1. 卸载 podman:输入 `yum erase podman buildah`,然后输入 y,等待卸载直到出现“完毕”。
2. 安装依赖环境:输入 `yum install -y yum-utils`。
3. 安装配置镜像:输入 `sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`。
4. 安装 docker CE:输入 `sudo yum install -y docker-ce docker-ce-cli containerd.io`。
5. 启动 Docker 服务:输入 `systemctl start docker`。
6. 查看版本:输入 `docker version`。
2.1.3 查看docker服务状态
# 查看docker服务状态
systemctl status docker
# 查看日志状态成功日志
systemctl status docker.service
2.1.4 添加docker用户组(可选)
# 建立 Docker 用户组
sudo groupadd docker
# 添加当前用户到 docker 组
sudo usermod -aG docker $USER
2.1.5 镜像加速配置
# 加速器地址 :
# 阿里云控制台搜索容器镜像服务
# 进入容器镜像服务, 左侧最下方容器镜像服务中复制加速器地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的加速器地址"]
}
EOF
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
*列:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}
2.2 常用docker运行命令
# 拉取docker镜像(从Docker hub上下载某个镜像);
docker pull image_name<镜像名称>
# 查找Docker Hub上的nginx镜像;
docker search image_name<镜像名称>
# 查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下;
docker images
# 删除镜像
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30<镜像id>
# 查看当前正在运行容器
docker ps
# 查看所有容器
docker ps -a
# 启动、停止、重启容器命令(container_name:容器名、container_id:容器id)
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
# 后台启动一个容器后,如果想进入到这个容器,可以使用attach命令(如果从这个容器退出,会导致容器的停止。)
docker attach container_name/container_id
# 进入一个已经在运行的容器(推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。)
sudo docker exec -it 775c7c9ee1e1 /bin/bash
# 退出容器
exit
# 删除容器的命令(container_name:容器名、container_id:容器id)
docker rm container_name/container_id
# 删除所有停止的容器
docker rm $(docker ps -a -q)
# 强制删除
docker rmi 镜像号 --force
# 查看当前系统Docker信息
docker info
# 查看容器的日志命令(container_name:容器名、container_id:容器id)
docker logs container_name/container_id
2.2.1登出入容器
# 登录容器
docker exec -it 容器名称 (或者容器ID) /bin/bash
# 退出容器
exit
2.3 安装目录详情
docker默认安装目录:
/var/lib/docker
docker启动后日志会在以下位置:
/var/lib/docker/containers/容器ID/容器ID-json.log
2.3.1 # [更改docker镜像的存储路径]
2.3.1.1 查看Docker存储路径
docker info|grep "Docker Root Dir"
2.3.1.2 ## 停止 Docker 服务
sudo systemctl stop docker.service`
2.3.1.3 新增的磁盘挂载点上新建目录,并将原有的docker容器和镜像全部拷贝过来,比如这里新增磁盘的挂载点为 /data/,则参照如下命令操作
mkdir -p /data/var/lib/docker/
cd /data/var/lib/docker/
cp -R /var/lib/docker/* /data/var/lib/docker/
#这段配置看下述补充,只适合做软链接迁移了
mv /var/lib/docker /var/lib/docker-bak
ln -s /data/var/lib/docker /var/lib/docker
------------------------------------------------------------------
#补充,这里出现了一个cp -R 文件复制递归问题,只能递归/var/lib/docker 的docker子目录的权限,导致在配置文件daemon.json 修改了路径启动一直报错(一般递归地复制目录和子目录,并且保留源文件的所有权限信息,包括所有者、所属组、文件权限以及时间戳等)
#建议修改为以下路径
mkdir -p /data/docker/
cd /data/docker/
cp -R /var/lib/docker/* /data/docker/
2.3.1.4 设置docker的配置文件,并指定存储路径,如果文件不存在则直接创建一个
vi /etc/docker/daemon.json
{
"data-root": "/data/docker",
"registry-mirrors": ["https://ooe7wn09.mirror.aliyuncs.com"]
}
2.3.1.5 重启docker服务
systemctl daemon-reload
systemctl start docker
2.4 Docker从容器拷贝文件到宿主机操作案例
案例一:
# 以elasticsearch容器为例
# 运行es
docker run -d -p 9200:9200 elasticsearch:5.4
# 查看已运行的容器
docker ps
# 进去容器内部,找到需要拷贝的文件及目录
docker exec -it 2c2600fb60f8 /bin/bash
# 从容器中退出
exit
# 将container id为4db8edd86202的容器内elasticsearch.yml文件拷贝到宿主机指定目录下:
docker cp 4db8edd86202:/usr/share/elasticsearch/config/elasticsearch.yml /home/haopeng/es
【把docker中容器时db002里面的my.cnf文件拷贝到根目录下】
docker cp db002:/etc/mysql/my.cnf ~/root/
【把根目录下my.cnf文件拷贝到docker中容器时db002里面】
docker cp ~/root/my.cnf db002:/etc/mysql/my.cnf
2.5 端口映射问题(易忽略)
*列:
0.0.0.0:5000->5000/tcp
说明:容器内部的 5001 端口映射到我们本地主机的 5000 端口上。
3.Docker Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
4.Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
4.1 安装 Docker Compose
接下来,安装Docker Compose。运行以下命令:
curl -L https://github.com/docker/compose/releases/download/2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
4.2 验证安装
docker -v
docker compose -v
在这里你可以看到版本号
4.3 更新和启动
接下来,我们需要创建一个目录来存放FastGPT的配置文件。
# 在 docker-compose.yml 同级目录下执行
docker compose pull
docker compose up -d