docker相关

一,安装docker

1,配置网络相关

#关闭防火墙,并取消开机启动
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux
vim /etc/selinux/config
改为disabled
#永久关闭swap
vim /etc/fstab
注释掉/dev/mapper/centos-swap swap swap defaults 0 0 或者下面这句话
UUID=069da836-7aaf-41f5-b2d1-dbb72e8eecf1 swap swap defaults 0 0

2,配置yum源

(1)设置aliyun yum源

#移动原本源
mv /etc/yum.repos.d/* /opt
#通过curl下载aliyun 源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

常见问题以及解决方案:

源拉取失败:可能是自己的ip地址被ban,可以通过更改网络环境修复。

                      可能是aliyun更改了源地址,前往aliyun更改地址即可。

                      上述方法都不行可以尝试更换其他源。

(2)开启流量转发(选做)

vim /etc/sysctl.d/docker.conf

net.ipv4.ip_forward=1

(3)下载,安装docker

yum clean all
yum install docker -y

ps:我选择装的是默认版的docker,如需指定ce或者ee版请在docker后加-ce或-ee

(4)配置加速器

自己注册aliyun账号,获取加速器代码,博主这里是8xpk5wnt

vi /etc/docker/daemon.json
{
 "registry-mirrors" : ["https://#你的代码#.mirror.aliyuncs.com"]
}

(5)启动docker 并查看版本

#重启虚拟机
reboot
#启动docker:重载daemon,设置开机自启
systemctl enable docker 
systemctl daemon-reload
systemctl restart docker

docker --version

二,docker相关命令

1,镜像相关命令

查看镜像

docker images
# 查看所用镜像的id
docker images –q 
搜索镜像 : 从网络中查找需要的镜像
docker search 镜像名称
 #查找nginx镜像
docker search nginx
拉取镜像
docker pull 镜像名称
#下载最新版本redis
docker pull redis
#下载5.0版本redis
docker pull redis:5.0 

ps:一般不指定端口号的情况下则是最新的版本lastest

删除镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi -f 镜像id # 强制删除指定本地镜像
docker images -q # 查看所有的镜像列表
docker rmi `docker images -q` # 删除所有本地镜像

2,容器相关命令

查看容器

docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器
创建并启动容器
docker run 参数

相关参数:

-i :保持容器运行。通常与 -t 同时使用。加入 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
-t :为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d :以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用 docker exec 进入容器。退出后,容器不会关闭。
-it 创建的容器一般称为交互式容器, -id 创建的容器一般称为守护式容器
--name :为创建的容器命名。
案例:创建一个容器,使用镜像为centos7,命名为mhy,分别以交互式和守护式创建
#创建交互式容器
docker run -it --name=mhy centos:7 /bin/bash 
#创建守护式容器
docker run -id --name=mhy2 centos:7 

ps:交互式容器,exit后容器自动关闭,守护式容器会在后台执行

进入容器

docker exec -it mhy /bin/bash #进入容器
停止容器
docker stop 容器名称

删除容器

docker rm 容器名称
docker rm -f 容器名称 # 强制删除容器

查看容器信息

docker inspect 容器名称

退出容器

exit

3,卸载docker

-- 查看yum安装的docker文件包
yum list installed |grep docker
-- 查看docker相关的rpm源文件
rpm -qa |grep docker
-- 删除相关服务
yum -y remove docker相关

三,简单部署项目

1,部署mysql数据库(redis同理,更换相关包名即可)

拉取mysql5.7镜像

docker pull mysql:5.7
创建容器,设置端口映射、目录映射
案例:创建一个mysql容器,root密码为123456,使用默认端口号
docker run -d --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=mhy mysql:5.7
-- 想存入中文还不想要乱码就按照以下内容创建容器
docker run -d --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e
MYSQL_DATABASE=mhy mysql:5.7 --character-set-server=utf8mb4 --collationserver=utf8mb4_unicode_ci

相关参数:

-p 代表端口映射,格式为 宿主机映射端口 : 容器运行端口
-e MYSQL_ROOT_PASSWORD=123456 // 表示设置 root 的密码为 123456
-e MYSQL_DATABASE=mhy // 创建 mysql 数据库容器的同时初始化创建一个数据库 mhy
ps:MySQL的默认端口号是3306
       redis默认端口号是6379
进入容器正常使用
可以看到先前设置的数据库mhy
2,部署tomcat 项目
拉取 tomcat 镜像
docker pull tomcat
创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat2 -p 8082:8080 -v $PWD:/usr/local/tomcat/webapps tomcat

ps:上面ROOT文件夹对应容器中/usr/local/tomcat/webapps下面的ROOT文件夹

在里面放入test.html 

echo "hello Docker" > test.html
输入对应ip:8082/test.html查看结果
四,docker容器的数据卷
1,数据卷概念:
数据卷是宿主机中的一个目录或文件
当容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
2,数据卷的作用:
容器数据持久化
外部机器和容器间接通信
容器之间数据交换
3,配置数据卷容器的参数
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...

案例:

docker run -id --name=c_tomcat2 \
-p 8082:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

这里就是将当前目录作为宿主机目录,后面为容器内tomcat目录,$PWD表示当前目录

ps:

1. 容器目录必须是绝对路径

2. 如果目录不存在,会自动创建

3. 一个容器 可以挂载多个数据卷
---------------------------------------------------------------------------------------------
4,数据持久化
(1)添加三个数据卷在3307端口下的mysql2容器内
# 在/root目录下创建mysql目录用于存储mysql数据信息
# 每行指令后面"\"表示换行
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
关闭容器,可以看到数据卷数据文件还在
docker stop mysql2

看到宿主机目录还在

(2)一个容器挂在多个数据卷
docker run -id \
-p 3007:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

可以看到容器挂载在不同的两个数据卷上

(3)两个容器挂载同一个数据卷

# 第一个容器
docker run -id \
-p 33306:3306 \
--name=mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
# 第二个容器
docker run -id \
-p 33307:3306 \ # 此处端口号发生变化
--name=mysql2 \ # 此处名称发生变化
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

进入容器可以看到更改其中一个容器,另一个容器和宿主机都会变动

(4)配置使用数据卷容器

1,创建一个数据卷容器

docker run –it --name=c3 –v $PWD:/volume centos:7 /bin/bash

2,创建两个容器使用--volumes-from 参数 设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

效果:

docker exec -it c3 /bin/bash
cd /volume/
mkdir aa
exit
docker exec -it c2 /bin/bash
cd /volume/
ls
exit
docker exec -it c1 /bin/bash
cd /volume/
ls
exit

5,容器转镜像

相关命令:
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称

案例:将一个tomcat容器转为镜像

# 创建tomcat容器
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
# 进入tomcat容器
docker exec -it c_tomcat /bin/bash
#在/root下创建a.txt b.txt 在webapps下面创建一个文件夹/test
cd ~
touch a.txt b.txt
#容器转镜像
docker commit 容器ID sj_tomcat:1.0
#压缩镜像
docker save -o sj_tomcat.tar sj_tomcat:1.0
#删除原来镜像
docker rmi sj_tomcat:1.0
#从压缩文件加载镜像
docker load -i sj_tomcat.tar
#创建容器
docker run -it --name=new_tomcat sj_tomcat:1.0 /bin/bash
#进入容器查看内容
docker exec -it new_tomcat /bin/bash
#可以看到a.txt b.txt存在,而webapps/test不存在

重点:容器转镜像不能转数据卷文件

四,dockerfile

概念:

Dockerfile 是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了
对于运维人员:在部署时,可以实现应用的无缝移植
dockerfile中的关键字:

FROM:这是所有Dockerfile的起始关键字,用于指定构建目标镜像的基础镜像。该关键字决定了后续指令运行的环境。

MAINTAINER:用于指定制作这个 Dockerfile 的作者信息,该指令已被标记为弃用,新的 LABEL 指令被推荐用来替代它,用于添加元数据到镜像中。

RUN:用于在镜像构建过程中执行特定命令,它可以安装软件包、删除文件等。通过此关键字,可以一步步修改基础镜像,使其满足使用需求。

COPY和ADD:这两个关键字用于将文件或目录从宿主机复制到镜像中。COPY适用于本地文件系统路径,而ADD除了具备COPY的功能外,还可以解压缩压缩文件和处理远程URL。

CMD和ENTRYPOINT:CMD指定容器启动时要运行的命令,但不适宜处理牙嵌套命令。ENTRYPOINT设置容器启动时执行的命令并允许牙嵌套命令,即它指定的命令会作为容器的主进程。

ENV:设置容器内部环境变量的关键字,这些变量可在运行时传递给应用程序,或者在Dockerfile其他指令中使用。

EXPOSE:声明容器将要监听的端口,但这不会自动将端口发布到宿主机。发布操作需在运行容器时通过参数实现。

VOLUME:用于创建可以被一个或多个容器使用的数据卷,通常用于持久化数据和共享配置。

WORKDIR:设置Dockerfile后续指令的工作目录路径,此目录下的命令(如RUN、CMD)都会在此目录下执行。

USER:切换运行用户,适用于需要特定用户权限运行的应用。

HEALTHCHECK:用于定义容器健康检查的命令,帮助监控系统中容器的状态。

SHELL:在RUN、CMD、ENTRYPOINT之前设置一个默认的shell类型以便执行后续命令。

LABEL:该关键字用于定义镜像的标签,使得用户能够以键值对的形式为镜像添加元数据。例如 LABEL version="1.0" description="This is a custom image for my application" author="YourName"。

ARG:在 Dockerfile 中定义构建参数,允许在构建时传递变量。比如 ARG VERSION,在构建时可以通过 docker build --build-arg=VERSION=1.2 . 来指定版本号。

ONBUILD:当这个镜像用作其他 Dockerfile 的基础镜像时,ONBUILD 指令会在那个 Dockerfile 执行 FROM 指令后立即执行指定的命令。这允许创建触发器,用以自动执行某些操作。

STOPSIGNAL:设置发送给容器以退出的系统调用信号,这可以用于关闭容器中的进程。

------------------------------------------------------------------------------------------------------------------

案例:以centos7为基础创建一个镜像,可以使用vim编辑器,默认工作目录为/root

FROM centos:7
MAINTAINER Mei
RUN yum install -y vim
WORKDIR /root
CMD /bin/bash

使用docker build命令创建

docker build -f ./dockerfile -t yuanshen .

语法格式:docker build -f dockerfile文件的绝对路径 -t 自定义名称 .

ps:有时容器内安装软件时会遇到yum源无法使用的问题,需要手动配置源

RUN mv /etc/yum.repos.d/* /opt && \
curl -o /etc/yum.repos.d/centos.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo && \
yum install vim -y

把这个替换到原本的yum语句上

五,docker的服务编排

概念:Docker Compose是一个编排多容器分布式部署的工具,提供命令集中管理容器化应用的完整开发周期,包括服务构建,启动和停止

1,安装docker-compose

将编译好的包下载下来

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname - m` -o /usr/local/bin/docker-compose
设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
查看版本信息
docker-compose -version

2,编排nginx+springboot

创建测试文件夹test并进入

mkdir ~/docker-compose
cd ~/docker-compose

编写docker-compose.yml文件

vim docker-compose
version: '3'
services:
 nginx:
  image: nginx
  ports:
   - 80:80
  links:
   - app
  volumes:
   - ./nginx/conf.d:/etc/nginx/conf.d
 app:
  image: app
  expose:
   - "8080"

重点:严格注意缩进格式!!!

创建 ./nginx/conf.d 目录 ./nginx/conf.d/ 目录下编写 app.conf 文件
mkdir -p ./nginx/conf.d # 跟上面docker-compose.yml中vloumes对应即可

vim ./nginx/conf.d/app.conf

server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://app:8080/;
    }
}
~/docker-compose 目录下 使用 docker-compose 启动容器
docker-compose up -d # -d表示使用守护模式启动
docker-compose down # 停止容器
测试访问
进入浏览器输入 http://你的ip/hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值