linux docker入门

本文详细介绍了在Linux环境下安装Docker CE的过程,包括准备工作、安装依赖、配置daemon.json以及启动和验证Docker版本。此外,还深入讲解了Docker的基本概念,如仓库、镜像和容器。最后,通过实例演示了如何使用Docker部署MySQL和Tomcat应用。

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

前言

Docker是基于Linux内核实现的, Docker最早采用了LXC技术, LXC是Linux原生支持的容器技术, 可以提供轻量级的虚拟化. Docker基于LXC发展, 提供了LXC的高级封装, 标准的配置方法, 在LXC的基础上, Docker提供了一系列更强大的功能. 而虚拟化技术, 比如KVM, 是基于模块实现, 后来Docker改为自己研发并开源的runc技术运行容器。

Docker 相比虚拟机,其交付速度更快, 资源消耗更低, Docker采用客户端/服务器端架构, 使用远程API来管理和创建容器, 其可以轻松的创建一个轻量级的, 可移植的, 自给自足的容器. Docker的三大理念就是build, ship, run。

Docker通过namespace和cgroup来提供容器的资源隔离与安全保障等, 所以Docker容器在运行时, 不需要类似虚拟机的额外资源开销, 因此可以大幅度提供资源利用率

优点:
	资源利用率更高: 开销更小, 不需要启动单独的虚拟机OS内核占用硬件资源, 可				以将服务器性能压榨至极致. 虚拟机一般会有5-20%的损耗, 容器运行基本无损耗, 所以生产中一台物理机只能运行数十个虚拟机, 但是一般可以运行数百个容器
	启动速度更快: 可以在数秒内完成启动
	占用空间更小: 容器一般占用的磁盘空间以MB为单位, 而虚拟机即使是最小化安装也要占1个G多的空间
	集成性更好: 和CI/CD相关技术结合性更好, 实现打包镜像发布测试可以一键运行, 做到自动化并快速的部署管理, 实现高效的开发生命周期

缺点:
	隔离性: 多个容器共用宿主机的内核, 各应用之间的隔离不如虚拟机彻底

一. linux docker安装

1. 准备工作

# 查看服务器系统版本或者内核版本
cat /etc/redhat-release
# 查看服务器内核版本
uname -r

2. 安装依赖环境

yum install -y yum-utils device-mapper-persistent-data lvm2

3. 添加docker-ce镜像源

# 镜像源是阿里镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4. 安装docker

Docker从17.03版本之后分为两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,个人开发者一般用不到,所以我们只需要安装社区版docker-ce版本即可。

yum install -y docker-ce

5. 启动docker,并查看docker的版本信息

#启动docker命令
systemctl start docker
#查看docker版本命令
docker version

6. 配置docker daemon.json文件

# 配置文件的默认路径:/etc/docker/daemon.json
vi /etc/docker/daemon.json
{
	 # 镜像源管理,我增加了阿里镜像源,可以提速 
	"registry-mirrors": [
	"https://jkfdsf2u.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http//hub-mirror.c.163.com"
	],
	#docker私服配置,因为不是https链接,所以在此配置   
	"insecure-registries": ["harbor.test.com","registry.cn-shenzhen.aliyuncs.com"] ,
	#日志最大存储限制,如果不配置它,可能会导致/var/lib/docker/tmp/containers目录中的容器日志过大,挤占系统盘空间。
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "10"
    }
    #Docker运行时使用的根路径,默认 "/var/lib/docker"
    "data-root": "/data/docker",
    # 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看
	"dns": ["192.168.1.1"],  
}

7. 重载daemon文件

 sudo systemctl daemon-reload
 # 重启docker服务
 sudo systemctl restart docker

二. docker介绍

1. 仓库 (repository)

docker仓库是用来保存镜像的地方。镜像构建完成后,可以直接在当前宿主机上运行,但是如果需要在其它服务器上使用这个镜像,
就需要一个集中存储、分发镜像的服务,docker仓库就是这样的一个服务。

2. 镜像(Image)

这里面保存了应用和需要的依赖环境,比如运行的runtime和webapp等。
为什么需要多个镜像?当开发、构建和运行容器化应用程序时,我们通常会有不同优先级。通过为这些独立的任务提供不同镜像

3. 容器(Container)

镜像的实例。一个容器代表一个正在运行的应用程序、进程或服务。它由 Docker 镜像、执行环境和标准指令集组成。需要扩展服务时,才
真正将镜像跑起来的东西,镜像在容器里面。可以看作是一个完全隔离的盒子。一个容器镜像实例代表一个独立的进程。

4. Docker常用命令

4.1 镜像相关

docker search --镜像名[:版本号]    # 搜索仓库镜像

docker pull --镜像文件名|ID    # 拉取镜像

docker push 镜像文件名	# 把docker长传到docker仓库,前提是有docker hub账号

docker rmi images_id/images_name	# 删除镜像文件

docker save -o 路径/xxx.tar 镜像名		# 打包本地的镜像文件,并到处到linux 目录下,用于备份或者备份

docker load --input xxxx.tar		# 导入tar文件到本地的镜像库

docker commit -p -a "作者名" -m "镜像的简介" container_id/container_name image_name:tag	# 提交镜像文件  

docker ps     # 查看目前正在运行的所有容器 (-a 显示包括已经停止的容器)

docker rmi image_id/image_name    # 删除镜像

docker build    # 使用Dockerfile创建镜像

4.2 容器相关

docker run container_id/container_name   # 运行容器

docker exec -it container_id/container_name /bin/bash   # 进入容器中执行命令, /bin/bash 为脚本解释器

exit		# 退出容器

docker cp 宿主路径 容器名[|容器id]:容器路径		# 将宿主的文件拷贝到容器中

docker export -o xxxx.tar container_name	# 把容器打包成tar包

docker import xxxx.tar usename/程序名:tag	# 把上一步的tar包,导入成镜像文件

docker logs  container_id/container_name   # 查看容器日志(例如:docker logs -f -t --tail 10 container_id )

docker start  container_id/container_name    # 启动容器

docker restart  container_id/container_name    # 重启容器

docker stop container_id/container_name    # 停止容器

docker rm [-f] container_id/container_name    # 删除容器(只能删除已停止的容器)

四. 使用docker安装部署应用

1. 部署mysql

1.1 搜索mysql镜像文件

docker search mysql:5.7	# 搜索mysql v5.7.xx版本的镜像信息

1.2 拉取镜像文件

docker pull idyci/mysql		# idycu/mysql为镜像名称,idycu镜像是创建人的名称
docker images		# 查看docker本地的镜像

1.3 启动mysql容器

docker run -d -p 3308:3306 --restart=always --name mysql57 --privileged=true -e MYSQL_ROOT_PASSWORD='123321' idyci/mysql
# 查看镜像的运行状态
docker ps -a	# 查看所有的镜像状态,包括关闭的

-it  输出容器命令行的内容 即容器的自身的程序输出在控制台 有点类似前台运行

-d  和it相反  隐藏后台运行

-p  端口映射 3308:3306 外部(宿主机)端口:镜像里面运行的端口 将宿主机9000端口映射到镜像里面的9000端口

--restart  重启方式:always跟随docker自启

--name  启动后的容器名称

-v  挂载容器数据卷

--network  连接到某个网络(例如:--network test_net)

--network-alias  容器的网络名称(例如:--network-alias portainer)

--privileged=true	进入容器使用root权限

-e MYSQL_ROOT_PASSWORD='123321'		密码

镜像文件名:一般放在指令的最后,要和本地镜像仓库的名字一致,这里可以填写镜像ID

1.4 查看镜像是否启动成功

docker ps -a 

1.5 在Navicat中导入项目所用数据库

-- 1. 创建数据库
create database [if not exists] 项目规定的数据库名 character set utf8;
-- 2 导入文件
-- 2.1 进入创建的数据库
use <dbname>
-- 导入项目sql文件
source 本地sql文件的路径

-- 2.2 或者在终端中,直接导入,前提是数据库中已经创建好了数据库
mysql -u 用户名 -p -h <ip地址> -P <端口号> 数据库名 < 存放位置

-- 到处sql文件
-- mysqldump -u 用户名 -p -h <ip地址> -P <端口号> 数据库名 > 存放位置

2. 部署tomcat项目

2.1 搜索tomcat镜像文件

docker search tomcat	# 注意查看JDK的版本

2.2 拉取tomcat镜像文件

 docker pull rightctrl/tomcat 

2.3 启动tomcat容器

# 1. 先启动tomcat容器
docker run -d --name tomcat -p 8090:8080 image_id
# 2. 查看logs日志,找到 CATALINA_HOME的路径,例:/opt/tomcat
docker logs image_id
# 3. 删除tomcat容器
docker rm -f tomcat
# 4. 重新启动tomcat容器
mkdir -p /mnt/tomcat/webapps
mkdir /mnt/tomcat/logs
docker run -d --name tomcat -p 8090:8080 -v /mnt/tomcat/webapps:/opt/tomcat/webapps -v /mnt/tomcat/logs:/opt/tomcat/logs iamge_id

docker run -d --name tomcat -p 8090:8080 -v 宿主目录:容器目录 
[-v 宿主目录:容器目录] 镜像名/镜像id

-v: 挂载目录,例如把容器中tomcat的webapps和其它需要操作的目录/文件 挂载到本地目录下

2.4 将项目的war包不是到tomcat中

# 1. 将war包部复制到本地的/mnt/tomcat/webapps中
cp war包的路径 /mnt/tomcat/webapps
# 2. 修改war包下的WEB-INF中的 db.properties的mysql配置,前提是mysql数据库文件已经导入进数据库了
vi db.properties路径		# 主要修改url和password,因为是容器的配置,不能使用localhost,必须是ip地址
# 3. 重启tomcat容器
docker restart tomcat
# 4. 查看镜像是否启动成功
docker ps -a 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值