Docker的基本使用与配置
Linux (虚拟机)环境存在问题:
环境安装的应用程序(redis,mysql)由于依赖jar包 ,函数库都放在了同一个依赖库,会造成冲突
Docker : 快速交付应用、运行应用的技术
作用:将每个应用程序自己所依赖的jar包,函数库,运行操作系统 进行打包变成镜像文件,运行形成容器,互相隔离。
区别:
Docker 是一个应用程序、进程;虚拟机是一个操作系统
Docker 依赖库,函数库 放在镜像文件或者容器内,互相隔离;虚拟机放同一个目录
一、CentOS安装Docker
1.1卸载(可选)
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
1.2安装docker
首先需要虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
然后输入命令:
yum install -y docker-ce
docker-ce为社区免费版本。稍等片刻,docker即可安装成功。
1.3启动docker
Docker应用需要用到各种端口,逐一去修改防火墙设置。
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
常用命令:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
docker -v #查看docker版本
1.4配置镜像加速
docker官方镜像仓库网速较差,需要设置国内镜像服务:
CentOS配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://9rj7u25l.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
命令集合
Docker镜像文件相关指令
docker pull nginx:latest #拉取镜像文件
docker images #查看所有镜像文件
docker rmi nginx:latest #删除镜像
docker save -o nginx.tar nginx:latest #将镜像文件导出到虚拟机当前目录
docker load -i nginx.tar#加载压缩包到docker变成镜像文件
Docker容器相关指令
docker run --name ng -p 80:80 -d nginx:latest #运行镜像文件生成容器
命令解读:
docker run #创建并运行一个容器
--name #给容器起一个名字
-p #将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d #后台运行容器
nginx:latest #镜像名称:版本
docker ps #查看正在运行的容器
docker ps -a #查看所有容器(不运行的和运行)
docker stop ng #停止容器运行
docker start ng #运行容器运行
docker rm(-f) n #删除(强制删除)容器
docker logs(-f) ng #查看(持续)容器的日志
docker exec -it ng bash #进入容器内部
命令解读:
docker exec #进入容器内部,执行一个命令
-it :#给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
ng #要进入的容器的名称
bash #进入容器后执行的命令,bash是一个linux终端交互命令
数据卷相关的指令
docker volume create html #创建数据卷
docker volume ls #查看所有数据卷
docker volume inspect html #查看数据卷详细信息,包括关联的宿主机目录位置
docker volume rm html #删除指定数据卷
docker volume prune #删除所有未使用的数据卷
创建容器并进行数据卷的挂载:
docker run --name ng -v html:/usr/share/nginx/html -p 80:80 -d nginx
备注:不用创建数据卷,创建容器时会自动创建
Mysql 数据卷挂载:
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
-v /tmp/mysql/data:/var/lib/mysql \
-v /tmp/mysql/log:/var/log/mysql \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/my.cnf \
-d mysql:5.7.25
Dockerfile :
就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像
Docker build
DockerCompose:
文件是一个文本文件,通过指令定义集群中的每个容器如何运行