docker - 01

本文详细介绍Docker的基础概念与核心操作,包括Dockerfile编写、镜像构建与管理、容器运行与维护等,并介绍了如何利用docker-compose简化部署流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

介绍docker常用命令


一、名词解释?

  • 镜像
    对比类
  • 容器
    对比类的实例

eg: 类比: const person = new Person()
person => 容器
Person => 镜像


二、配置容器

1、创建 Dockerfile 文件
# 基础镜像版本
FROM node:18-alpine3.15
# 工作目录
WORKDIR /egg
# 从本机当前文件夹复制到镜像egg中    '.' => 表示当前目录 相对地址 
COPY package.json .
# 执行运行命令
RUN  npm install
# 复制剩余所有构建的必须文件
# 忽略 node_modules
# 需要创建 .dockerignore文件,剔除不需要复制的文件 
# 分开两个COPY  是因为实际项目中package.json 文件很少变动, 下次构建的时候可以使用docker的缓存
COPY . .
# 暴露容器的端口号, 和本地项目的端口号不同,是两个项目,只起文档作用,让人知道镜像使用的端口是多少
EXPOSE 3000
# 构建
CMD ["npm", "run", "dev"]

2、创建 .dockerignore
# 剔除nodule_modules
node_modules
# 剔除掉 Dockerfile
Dockerfile
# 剔除 .dockerignore
.dockerignore


三、容器操作

1、构建镜像
docker build .
2、发布镜像到docker hub 仓库
# 1、登录docker hub
docker login
# 发布,需要在hub创建一个同名仓库
docker push docker-test-image:v1.0
# 拉取远程镜像
docker pull docker-name
3、构建镜像
# 构建带名称和版本的镜像(也可以不带,不带默认名称及版本都为none) '.'表示相对地址,当前目录,和Dockerfile 同级
docker build -t docker-name:v1.0 .
# 给没有名称的镜像命名(通过 docker build .   构建的镜像名称默认为None)
docker tag imageId docker-name:v1.0
4、删除镜像
# -f(force) 强制删除,可删除正在运行中的镜像 镜像名称格式 name:version
docker rmi -f docker-name:v1.0
5、运行镜像
# -d 表示容器在后台运行,不占用命令行
# -p 表示映射端口 主机端口/容器端口(可以不同) 访问主机端口的时候会访问到容器的端口
# --name 自定义容器名称
# -v(volumes) 主机文件夹:容器文件夹  这样可以绑定两边的文件夹,文件变动可以联动,一边变化,另一边也会相应变化
# -v 如果只提供了一个容器文件地址,则表示容器里面的某系文件/文件夹是不能进行同步的
# eg: -v /containerFolder/node_modules 表示node_modules文件夹不能进行同步
# 如果容器有新增的文件或文件夹,那么本地也会同步新增,解决提问题只需让本地文件设为只读,可以在文件绑定的后面添加 :ro 表示只读
 docker run -d -v $PWD:/containerFolder:ro -v /containerFolder/node_modules -p 3000:3000 --name container-name docker-name:version
6、查看当前运行的容器
# -a 可以查看所有的容器,包括暂停运行的
docker ps
7、暂停容器的运行
docker stop containerId
8、删除(销毁)不需要的容器
# -f 强制移除在运行中的容器
# -v 同步删除volumes
docker rm -fv containerId
9、进入正在运行的容器
# -i  可交互模式
# -t 以终端交互的模式
docker exec -it container-name /bin/sh
10、重启容器
docker restart container-name
11、容器日志
# 查看容器启动日志
bash logs container-name

四、docker-compose

简介:将容器操作命令配置成一个文件,简化过长的命令行
# 在 Dockerfile 同级目录创建 docker-compose.yml 文件
touch docker-compose.yml

1、配置docker-compose.yml

# compose 版本
version: "3.8"
# 每个容器都需要在services 下声明
services:
# 容器名称
  nodejs-container:
	# 根据当前文件夹进行构建, docker引擎就会去找当前目录下的 Dockerfile 来构建镜像
    build: .
    # 端口映射 主机端口:容器端口
    ports:
      - "3000:3000"
    # volumes 相对地址
    volumes:
      - ./:/egg:ro
      - /egg/node_modules

2、运行docker-compose

# -d 在后台运行容器,不占用当前命令行
# --build 如果镜像有修改,docker-compose 就会重建, 如果不加上--build,下次就会使用之前的缓存。 docker-compose 的坑之一,谨记!!!
docker-compose up -d --build
<think>好的,我现在需要解决用户在使用docker-compose时遇到的权限问题和命令未找到的问题。首先,我得回忆一下用户提供的引用内容,看看有没有相关的解决方案。 用户提到了几个引用,其中引用[1]和[2]都是关于docker-compose的权限被拒绝的问题,解决方案是给docker-compose文件添加执行权限,用chmod +x命令。引用[3]提到的是用户权限不足,需要将用户加入docker组。引用[5]提到挂载目录的权限问题,需要给目录777权限。而命令未找到的问题可能和安装路径有关,或者docker-compose没有正确安装。 首先,权限被拒绝的问题可能有两个方面:一个是docker-compose本身的执行权限,另一个是用户对Docker守护进程的访问权限。对于docker-compose文件权限的问题,用户需要检查/usr/local/bin/docker-compose是否有可执行权限,如果没有,需要用chmod +x来添加,如引用[2]所述。另外,如果用户在执行docker-compose命令时提示权限不足,可能需要将用户加入docker组,并重新登录,如引用[3]的建议。 然后是命令未找到的问题,这可能是因为docker-compose没有正确安装,或者安装路径不在系统的PATH环境变量中。用户需要确认是否已经正确安装了docker-compose,可以通过下载二进制文件并放到/usr/local/bin/目录下,或者使用包管理器安装。安装后需要检查该目录是否在PATH中,以及文件是否存在。 此外,引用[5]提到的挂载目录权限问题,如果用户在使用docker-compose时涉及到挂载外部目录,可能需要确保该目录对容器内的进程是可写的,可能需要修改目录权限为777,虽然这不是最安全的做法,但可以临时解决问题。 现在需要把这些思路整理成步骤,分情况处理。首先处理命令未找到的问题,然后是权限问题。权限问题又分为docker-compose文件本身的权限、用户组权限以及挂载目录的权限。 可能需要注意用户是否同时遇到这两个问题,还是分开的情况。比如,如果用户正确安装了docker-compose但权限不足,或者安装不正确导致命令找不到。所以步骤需要分情况说明。 另外,要确保用户按照正确的安装步骤安装docker-compose,比如下载正确版本,赋予执行权限,放到正确的路径下。还要提醒用户检查安装后的路径是否在PATH中,或者是否有拼写错误。 对于权限问题,除了文件权限和用户组权限,还要考虑SELinux或AppArmor等安全模块可能会限制执行,但这种情况可能较少,用户可以先处理基本的权限问题。 总结解决方案的步骤: 1. 解决命令未找到: - 确认是否安装docker-compose - 检查安装路径是否正确,是否在PATH中 - 重新安装或移动文件到正确位置 2. 解决Permission denied: a. docker-compose文件权限:chmod +x b. 用户组权限:将用户加入docker组,重新登录 c. 挂载目录权限:chmod 777对应目录 需要分步骤说明,让用户逐步排查问题。同时引用相关的引用来源,如引用[2]和[3]中的方法。 可能需要提醒用户,使用777权限存在安全风险,建议在必要时使用更严格的权限设置,或者调整目录所有者为docker组。 另外,在安装docker-compose时,确保下载的是正确的版本,比如从官方GitHub下载,并验证文件的完整性。 最后,生成相关问题,如如何正确安装docker-compose,如何管理用户组权限,如何处理挂载卷的权限问题等。</think>### 解决`docker-compose`权限问题与命令未找到问题 #### 一、`docker-compose: command not found`问题 此错误表示系统未找到`docker-compose`可执行文件,可能原因如下: 1. **未正确安装`docker-compose`** 需通过官方方式安装: ```bash # 下载最新版本(替换版本号) sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装 docker-compose --version ``` 2. **安装路径未加入`PATH`环境变量** 检查`/usr/local/bin`是否在`PATH`中: ```bash echo $PATH ``` 若缺失,可手动添加: ```bash export PATH=$PATH:/usr/local/bin ``` --- #### 二、`Permission denied`权限问题 此问题涉及文件权限或用户组权限不足: 1. **`docker-compose`文件缺少执行权限** 直接授权(引用[2]): ```bash sudo chmod +x /usr/local/bin/docker-compose ``` 2. **用户未加入`docker`组** Docker守护进程默认仅允许`root`或`docker`组成员操作(引用[3]): ```bash # 将当前用户加入docker组 sudo usermod -aG docker $USER # 退出并重新登录以生效 ``` 3. **挂载目录权限不足** 若报错涉及容器挂载的目录(如`/conf/zoo.cfg`),需调整目录权限(引用[5]): ```bash sudo chmod 777 /path/to/directory ``` > **注意**:`777`权限存在安全风险,建议仅在测试环境使用,生产环境应限制为必要的最小权限。 --- #### 三、综合解决步骤 1. **安装并验证`docker-compose`** 按上述安装步骤操作,确保命令可执行。 2. **授权用户组** 将用户加入`docker`组,避免频繁使用`sudo`。 3. **检查挂载目录权限** 若使用数据卷,确保容器内进程有读写权限。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值