Linux服务器搭建Docker

本文详细介绍了如何在Linux服务器上安装Docker,包括环境配置、下载安装步骤,并深入讲解了Docker的基本命令、镜像操作、容器管理和数据卷使用。通过实例演示,读者可以快速掌握Docker容器的构建与部署技巧。

一、Docker概述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

Docker的出现的原因?

​ 问题:项目开发到上线,环境配置不一致,跨平台,容易出错

​ 解决:发布项目时,不仅有jar包,还要包含环境配置

核心概念:将项目和环境打包(镜像),发布到远程仓库,要用直接下载即可,每个镜像都是隔离互不干扰的,就像一个个集装箱

二、Docker安装

1、环境准备
# 系统内核是4.18
[root@tanghx ~]# uname -r
4.18.0-240.22.1.el8_3.x86_64
# 系统版本
[root@tanghx ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

2、下载安装

官方文档地址:https://docs.docker.com/

# 1、如果存在旧的版本,先卸载掉
sudo yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
           
# 2、安装需要依赖的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

# 3、设置镜像的仓库
# 安装阿里云的镜像
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4、安装docker相关,容器核心,客户端  docker-ce(社区版)
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
sudo systemctl start docker

# 开机自动启动 
sudo systemctl enable docker

# 更新yum软件包索引,CentOS7命令,
# centos8执行 dnf makecache
yum makecache fasty

查看Docker启动docker version

# 6、启动docker镜像
docker run hello-world
# 7、查看一下镜像是否存在,前面添加的hell-world存在
docker images
# 8、卸载docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

# /var/lib/docker docker的默认工作路径
3、阿里云镜像加速
  1. 登录阿里云,在弹性计算里找到容器镜像服务

  2. 找到镜像加速地址

  3. 配置使用

# 创建一个目录
sudo mkdir -p /etc/docker
# 编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xuxcjuy8.mirror.aliyuncs.com"]
}
EOF
# 重启服务
sudo systemctl daemon-reload
# 启动
sudo systemctl restart docker

三、Docker命令

# 查看docker容器版本
docker version
# 查看docker容器信息
docker info
# 查看docker容器帮助
docker --help
1、镜像命令

镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件所需要的所有内容(代码、运行时库、环境变量和配置文件)
所有的应用,直接打包docker镜像,就可以直接运行起来

如何得到镜像?

  1. 从远程仓库下载
  2. 别人拷贝
  3. 自己制作一个镜像DockerFile
  • 镜像下载
# 下载Redis官方最新镜像
docker pull redis
# 下载仓库所有Redis镜像
docker pull -a redis
# 下载私人仓库镜像
docker pull bitnami/redis
  • 镜像查看
# 列出本地images
docker images
# 只显示镜像ID
docker images -q
# 显示镜像的摘要信息(某列,如digests列)
docker images --digests
  • 镜像搜索
# 搜索仓库MySQL镜像
docker search mysql
# 只显示 starts >= 300 的mysql镜像
docker search --filter=stars=300 mysql
# 只列出 AUTOMATED=OK 的镜像
docker search --automated mysql
  • 镜像删除
# 单个镜像删除
docker rmi redis
# 强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
# 多个镜像删除,不同镜像以空格隔开
docker rmi -f redis mysql nginx
# 删除本地全部镜像
docker rmi -f $(docker images -q)
  • 镜像构建
# 1.编写dockerfile
cd /docker/dockerfile
vim mycentos
# 2.构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
2、容器命令
  • 查看容器:
# 查看正在运行的容器
docker ps
# 查看正在运行容器的ID
docker ps -q
# 查看所有容器(正在运行+历史运行过的容器)
docker ps -a
# 显示运行容器总文件大小
docker ps -s
# 显示最近创建的a个容器
docker ps -n a
# 不截断输出
docker ps --no-trunc
# 获取镜像redis的元信息
docker inspect redis
  • 容器启动

启动并进入 centos 容器,并查看 centos 容器里面目录

# 新建并启动容器(-i:交互模式运行,-t:为容器重新分配一个伪输入终端,--name:指定名称)
docker run -i -t --name mycentos
# 后台启动容器(-d:以守护方式启动容器)
docker run -d mycentos

# 启动一个或者多个已被停止的容器
docker start redis
# 重启容器
docker restart redis

注意:当docker run -d启动后台容器,使用docker ps发现容器停止了,是因为使用后台运行,必须要有一个前台进程,不然会自动停止(发现自己没提供服务)

  • 容器进程
# 列出redis容器中运行进程
docker top redis
# 查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
  • 容器日志
# 查看redis容器日志
docker logs redis
# 查看容器redis从2021年1月1日后的最新十条日志
docker logs --since="2021-01-01" --tail=10 redis
  • 容器的进入与退出
# 使用run方式在创建时进入
docker run -it centos /bin/bash
# 关闭容器并退出
exit
# 仅退出容器,不关闭
快捷键:Ctrl+P+Q
#直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false  确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
#在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i  即使没有附加也保持STDIN 打开;-t  分配一个伪终端
docker exec -i -t  centos /bin/bash
#以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
#以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos  touch cache.txt
  • 容器的停止与删除
# 停止一个运行中的容器
docker stop redis
# 杀掉一个运行中的容器
docker kill redis
# 删除一个已停止的容器
docker rm redis
# 删除一个运行中的容器
docker rm -f redis
# 删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q|xargs docker rm
# -l 移除容器间的网络连接,连接名为 db
docker rm -l db 
# -v 删除容器,并删除容器挂载的数据卷
docker rm -v redis

四、操作命令

1、生成镜像(commit)
# 基于当前redis容器创建一个新的镜像;
# 参数:
	# -a :提交的镜像作者;
	# -c :使用Dockerfile指令来创建镜像;
	# -m :提交时的说明文字;
	# -p :在commit时,将容器暂停
docker commit -a="tanghx" -m="这里是提交说明" [redis容器ID]  myredis:v1.1
2、容器主主机间的数据拷贝
# 将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
# 将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
# 将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]

五、容器数据卷

数据可以持久化,存储在容器之外的地方,Docker容器中产生的数据,同步到本地,容器之间有一个数据共享

目录的挂载,将我们容器内的目录,挂载到Linux上面

1、使用数据卷

方式一:直接使用命令来挂载 -v

#  -p 主机地址:容器地址
docker run -it -v 主机目录:容器目录
docker run -it -v /home/test:/home centos /bin/bash

# 启动之后查看容器信息,"Mounts:[]"-挂载信息
docker inspect 容器ID

例子:Docker 部署 MySQL

2、具名和匿名挂载
## 匿名挂载
# -v 容器内路径	不写主机目录
docker run -d -p --name nginx -v /etc/nginx nginx

## 具名挂载
# 给挂载起个别名,别名前没有 "/"("/"表示绝对路径)
docker run -d -p --name nginx -v mynginx:/etc/nginx nginx

## 查看所有卷的情况
docker volume ls
# 查看挂载信息
docker volume inspect 挂载具名

所有docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/卷名/_data

通过具名挂载,可以方便的找到我们的卷

挂载文件权限

# 通过 -v 容器内路径:ro rw 改变读写权限
ro	readonly	# 只读,该文件只能从容器外部改变
rw  readwrite	# 可读可写(默认)

# 设置了容器权限,容器对挂载出来的内容操作就有限制了
docker run -d -p --name nginx -v mynginx:/etc/nginx nginx
3、DockerFile

Dockerfile 就是用来构建docker镜像的构建文件,就是一个命令脚本

## 创建一个dockerfile文件,文件里面编写命令脚本(指令全大写)
# 构建一个基础镜像
FROM centos
# 挂载
VOLUME ["volume01","volume02"]
CMD echo "-----打印内容----"
CMD /bin/bash

## 执行Dockerfile创建镜像
#	-f dockerfile文件目录
#	-t 镜像名称、版本
docker build -f /home/docker/dockerfile -t tanghx/centos:1.0 .
<think>好的,用户现在问的是如何在Linux系统上安装Docker。之前用户提过关于切换到root用户的问题,现在转向安装Docker,需要结合之前的引用内容来回答。 首先,我得回顾用户提供的引用内容。引用1和2提到了安装Docker社区版,使用curl脚本安装,引用3是配置国内镜像,引用4关于yum-utils的作用。用户现在需要具体的安装步骤,可能包括设置镜像加速,尤其是国内用户可能需要。 用户之前的问题是关于切换到root用户的,所以在安装Docker时可能需要用到sudo或者切换到root权限。因此,在回答中要强调权限的使用,比如使用sudo命令,或者在步骤中提醒用户切换到root。 接下来,我需要组织安装步骤。通常Docker的官方安装步骤包括卸载旧版本、设置仓库、安装依赖、添加GPG密钥、添加仓库、安装Docker引擎、启动服务、验证安装、配置镜像加速等。结合引用中的内容,引用2提到了使用阿里云的安装脚本,引用3是配置镜像,引用4提到yum-config-manager来添加仓库,这些都可以整合到步骤中。 需要注意用户可能使用的Linux发行版,这里假设是CentOS或Ubuntu,但用户提供的引用中有yum-utils,可能更偏向于CentOS/RHEL系。所以步骤里要区分不同发行版的命令,但用户的问题可能更通用,所以可能需要分情况处理,或者给出通用的方法。 另外,用户提到安装可视化管理工具Portainer,这在引用1中有提到,但用户当前的问题可能不需要,但可以作为可选步骤补充,提供额外价值。 安全方面,安装Docker通常需要root权限,所以步骤中需要提醒用户使用sudo或者切换至root用户,这和用户之前的问题相关,可以自然衔接,比如在步骤中使用sudo命令,或者提示用户如何获取权限。 最后,验证安装是否成功,运行hello-world镜像,并配置国内镜像加速,如阿里云,这部分引用3的内容可以直接用上。 总结步骤:卸载旧版本、安装依赖工具、添加Docker仓库、安装Docker引擎、启动服务、验证、配置镜像加速,可选安装Portainer。同时注意权限问题,使用sudo,或者在root下操作,这关联到用户之前的问题,可能需要再次提醒相关命令。</think>在Linux系统中安装Docker的完整步骤如下(以CentOS/Ubuntu为例): ### 一、环境准备 1. **卸载旧版本**(避免冲突) ```bash $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # CentOS/RHEL ``` 或 ```bash $ sudo apt-get remove docker docker-engine docker.io containerd runc # Ubuntu/Debian ``` ### 二、安装依赖工具 2. **安装yum-utils工具集**(含yum-config-manager) ```bash $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # CentOS/RHEL[^4] ``` 或 ```bash $ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release # Ubuntu/Debian ``` ### 三、配置镜像仓库 3. **阿里云镜像加速配置**(推荐国内用户) ```bash $ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # CentOS[^4] ``` 或 ```bash $ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Ubuntu ``` ### 四、安装Docker引擎 4. **一键安装脚本**(自动适配系统) ```bash $ curl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyun # 自动选择国内源[^2] ``` 或手动安装: ```bash $ sudo yum makecache fast # CentOS $ sudo yum install docker-ce docker-ce-cli containerd.io ``` ### 五、启动与验证 5. **启动Docker服务** ```bash $ sudo systemctl start docker $ sudo systemctl enable docker ``` 6. **验证安装** ```bash $ sudo docker run hello-world # 成功运行即安装正确[^1] ``` ### 六、配置镜像加速(可选) 7. **创建daemon.json配置文件** ```bash $ sudo mkdir -p /etc/docker $ sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://vsxcs7sq.mirror.aliyuncs.com"] } EOF $ sudo systemctl restart docker # 重启生效[^3] ``` ### 七、权限配置(可选) 8. **普通用户免sudo操作** ```bash $ sudo usermod -aG docker $USER $ newgrp docker # 刷新用户组 ``` ### 八、安装Portainer(可选) 9. **部署可视化面板** ```bash $ docker volume create portainer_data $ docker run -d -p 9000:9000 --name portainer --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer-ce ``` 访问 `http://服务器IP:9000` 完成初始化[^1] --相关问题-- 1. Docker安装后如何设置开机自启? 2. 如何彻底卸载Docker及其依赖? 3. 为什么运行`docker ps`提示权限不足? 4. 如何查看当前Docker使用的镜像源? [^1]: Portainer提供Web界面管理容器 [^2]: 阿里云镜像加速提升下载速度 [^3]: 镜像配置需重启Docker生效 [^4]: yum-utils工具简化仓库管理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值