Docker的安装与基础

Docker

==Docker 是一个开源的应用容器引擎,是虚拟化的一种轻量级替代技术。== 官网:Docker: Accelerated Container Application Development 文档地址:Docker Docs Doker镜像仓库地址:https://hub.docker.com/

安装手册地址:Install Docker Engine on CentOS | Docker Docs

Dockder的安装(centos)

官网安装篇:Install Docker Engine on CentOS | Docker Docs

环境准备

 

# 系统内核环境在3.1以上
Last login: Thu Nov 17 16:05:37 2022 from 192.168.95.1
[root@cwsEds01 ~]# uname -r
3.10.0-1160.71.1.el7.x86_64
#系统
[root@cwsEds01 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

开始安装

# 1.卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2.需要的安装包
yum install -y yum-utils
# 3.设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认是从国外的。
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的。
    
# 安装容器之前,更新yum软件包索引。
yum makecache fast

# 4.安装容器相关的。docker-ce(社区版)docker-ee(企业版)
yum install docker-ce docker-ce-cli containerd.io

# 5.启动docker
systemctl start docker
# 6.使用docker version查看是否安装成功
docker version            

# 7.测试
docker run hello-world

 卸载dockder

# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
# /var/lib/docker  docker的默认工作路径

 阿里云加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://a6jwd2z5.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

Dockder的运行

Docker常用指令

帮助命令

docker version #查看docker的版本
docker info #查看docker的系统详细信息
dicker 命令  --help

镜像命令

指令作用
docker images查询系统所有镜像
docker images -a列全部镜像
docker images -q只显示镜像的id
docker images --查看信息
[root@cwsEds01 ~]#  docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   14 months ago   13.3kB

#详情
REPOSITORY     #(仓库源)
TAG #标签
IMAGE ID  #id
CREATED  #创建时间
SIZE #镜像的大小
docker search --搜索
[root@cwsEds01 home]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13496     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5153      [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   696       [OK]       
percona                         Percona Server is a fork of the MySQL relati…   594       [OK]       
bitnami/mysql                   Bitnami MySQL Docker Image                      79                   [OK]
docker pull --下载(拉取)
         
[root@cwsEds01 home]# docker pull mysql
Using default tag: latest  #如果不写版本号安装的就是最新的
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实下载地址

#指定版本号 
docker pull mysql:8.0
docker pull mysql:5.7

注意这里的版本号笔记在dockerhup上有的!!!

docker rmi -f 删除镜像
指令作用
docker rmi -f 镜像id或者名称删除对应的镜像
docker rmi -f $(docker images -aq)删除所有镜像

 

[root@cwsEds01 home]# docker rmi -f 3218b38490ce
Untagged: mysql:8.0
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2

 

容器命令

安装centos

docker pull centos
新建容器并启动--run
指令作用
docker run -it centos /bin/bash运行容器
docker run -d 名称后台运行
docker run -it 名称使用交互方式进行运行,进入容器查看内容
docker run -p 名称指定端口 -p 8080:8080
exit退出容器
ctrl+P+Q退出容器后台运行
查正在运行的程序--ps
指令作用
docker ps查看正在运行的程序
docker ps -aq查看正在运行的程序和历史运行程序
启动和停止容器的操作--stop
指令作用
docker start 容器id启动容器
docker stop 容器id停止容器
docker restart 容器id重启容器
docker kil 容器id强制停止容器
查看容器进程
#命令
docker top 3fc918afd945

# docker top 3fc918afd945
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                13108               13088               0                   14:35               pts/0               00:00:00            /bin/bash
查看镜像云数据--inspect
#查看对应的数据源
docker inspect 容器id

进入当前正在运行的程序--exec
docker exec -it 容器id #进入容器后开启一个新的终端,可以在里面操作
# 例子: docker exec -it  nginx01 /bin/bash

docker attach  容器id #进入容器正在执行的终端,不会启动新的进程

拷贝容器的数据到主机上--cp
#语法 
docker cp  容器id:文件路径  拷贝的路径

#例子
docker cp 7e0134ea8656:/home/text.java /home

安装nginx

dockerhub地址:https://hub.docker.com/_/nginx

#搜索dockerhup是否有对应的资源
docker search nginx
#拉取
docker pull nginx
#运行
docker run -d --name nginx01 -p 6666:80 nginx

# -d 后台运行
# --name nginx01 表示别名
# -p 把nginx默认的80端口映射到6666端口

#访问
主机的IP地址:6666 #如果不知到自己主机的ip地址可使用:ifconfig

 

本机测试 使用curl

#[root@cwsEds01 home] curl localhost:8808
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@cwsEds01 home]# 

nginx的文件目录

#进入nginx   
docker exec -it 名称 /bin/bash

#查看目录
whereis nginx

image20221123103409776.png

目录作用
/etc/nginx配置文件存放位置
/usr/share/nginx页面存放位置

nginx的基础配置

#user  nobody;
worker_processes  1;                       //进程个数,默认开启的时候启动一个子进程

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
worker_connections  1024;              //每个进程可以创建1024个连接
}


http {
include       mime.types;               //将另一个文件,引入到主配置文件
default_type  application/octet-stream; //默认类型(在mime.types没有的类型)
//#默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输


sendfile        on;                     //数据0拷贝,直接从你的电脑通过无线拷贝到我的电脑,不需要借助u盘

keepalive_timeout  65;                  //保持连接,时间超时


server {                               //一个server代表一个主机,nginx可以配置多个主机
listen       80;                   //默认服务器端口是80,通过端口后来区分不同的主机
server_name  localhost;            //配置域名或主机名


#http://baidu.com/xxo/index.html   为URL
#/xxo/index.html                   为URI(资源)


location / {                       //重点内容(域名后面的子目录,类似于URI)
root   html;
index  index.html index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;  //发生服务器内部错误
location = /50x.html {                  //不同的错误码会转向不同的html下
root   html;
}
}

 工作原理图

 

安装tomcat

dockerhub地址:https://hub.docker.com/_/tomcat

#安装
docker pull tomcat

#运行
docker run -it -d --name tomcat01 -p 8889:8080 tomcat

#测试
curl localhsot:8889

#访问
主机的IP地址:8889 #如果不知到自己主机的ip地址可使用:ifconfig

出现404?

#进入tomcat
docker exec -it tomcat01 /bin/bash
#查看webapps文件下发现是空的
#应为阿里云镜像默认下载最小压缩版本
#查看目录后发现有一个webapps.dist 目录,此时我们只要把webapps.dist拷贝到webapps文件夹下就行
cp /webapps/* /wenapps

#重新访问即可

commit镜像

和git相识,创建一个新的版本提交下次可以直接使用

#语法
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]

案例:

在docker拉去下来的tomcat启动是没有页面的,当我们配置完成有页面后是使用commit提交一个新的版本和配置,下次就可以直接用了!!!

#查看进程
[root@cwsEds01 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED       STATUS       PORTS                                       NAMES
01888f3760c5   tomcat     "catalina.sh run"        2 hours ago   Up 2 hours   0.0.0.0:8889->8080/tcp, :::8889->8080/tcp   tomcat03
d9084fc00e66   nginx      "/docker-entrypoint.…"   3 hours ago   Up 3 hours   0.0.0.0:8808->80/tcp, :::8808->80/tcp       nginx01
7e0134ea8656   centos:7   "/bin/bash"              4 hours ago   Up 4 hours                                               confident_newton

#设置tomcat
docker exec -it tomcat01 /bin/bash
#查看webapps文件下发现是空的
#应为阿里云镜像默认下载最小压缩版本
#查看目录后发现有一个webapps.dist 目录,此时我们只要把webapps.dist拷贝到webapps文件夹下就行
cp /webapps/* /wenapps
#退出
exit
#执行指令
[root@cwsEds01 ~] docker commit -a='chen' -m='new version' 01888f3760c5   newtomcat:1.0

sha256:e70b9a45be8fbbe482f2468e5fd51bd021bf8f488c9e06e1e9e70b577b141dd2xxxxxxxxxx

image20221123133531216.png

#启动测试
docker run -it -d --name tocat06 -p 8887:8080 newtomcat 
#启动完成
curl localhost:8887

容器数据卷

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

跟Linnux的tools类似,也可以理解为双向数据绑定。

docker run -it -v 主机目录:容器目录
#测试
docker run -it -v /home/test:/home centos /bin/bash 
#使用
docker inspect dbc88564d349

 

例子:

  1. 主机目录上的home上创建一个test.java

  2. 在容器目录 /home/test查看是否有test.java

  3. 在本机使用vim编写内容

 

  1. 在容器目录使用cat 指查看内容

mysql配置容器数据卷

安装mysql

docker pull mysql5.7		

docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 

#-d 后台运行
#-p 3301:3306 端口解析
#-v /home/mysql/conf:/etc/mysql/conf.d 配置容器数据卷
#-v /home/mysql/data:/var/lib/mysql 配置数据库为
#-e MYSQL_ROOT_PASSWORD=123456 配置密码
#--name mysql01 配置别名

使用navicat的ssh测试连接。

优点:当容器被删除时本地的数据仍然存在的,起到了防止数据丢失的情况。

 

Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

image20221124161858653.png

image20221124085706112.png

使用指令

FROM        # 基础镜像,一切从这里开始构建
MAINTAINER    # 镜像是谁写的:姓名+邮箱
RUN            # 镜像构建的时候需要运行的命令
ADD            # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR        # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOSE        # 暴露端口配置
CMD            # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD        # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY        # 类似ADD,将我们文件拷贝到镜像中
ENV            # 构建的时候设置环境变量!

制作自己的centos

# 1. 编写dockerfile的文件
FROM centos:7 #基础镜像
MAINTAINER sywl<xxx@qq.com> #作者信息
ENV MYPATH /usr/local #定义变量MYPATH
WORKDIR $MYPATH #镜像的工作目录

RUN yum -y install vim #在docker中默认下载的centos时没有 vim指令的,现在重新构建时区下载
RUN yum -y install net-tools #和上面相同

EXPOSE 80 #配置端口

CMD echo $MYPATH #输出地址
CMD echo "-----end-----" #输出运行信息
CMD /bin/bash #启动模式

# 2. 通过这个文件构建镜像
# 命令:docker build -f dockerfile文件路径 -t 镜像名:[tag]
docker build -f mydockerfile-centos -t mycentos:0.1 .

#运行centos
docker run -it mycentos

Dockerfile制作自己的tomcat

环境下载地址:

链接:百度网盘 请输入提取码 提取码:6666

1.准备环境

image20221124161049579.png

2.编写==DockerFile== 文件,并使用Dockerfile命名,build的时候就奴需要区使用 -f 制定了。

#创建一个readme.txt 用于记录对应的日志或者文档
touch readme.txt
#编写dockerfile
vim DockerFile

FROM centos:7 #基础镜像

MAINTAINER cws<2411286960@qq.com> #作者信息


COPY  readme.txt /usr/local/readme.txt #拷贝

ADD jdk-8u351-linux-x64.tar.gz /usr/local/ #解压jdk
ADD apache-tomcat-9.0.22.tar.gz /usr/local/ #解压tomcat


RUN yum -y install vim  #添加 vim指令 
RUN yum -y install net-tools #添加 ifconfig指令


EVN MYPATH /usr/local #定义变量(固定写法)

WORKDIR $MYPATH #设置工作目录(固定写法)


ENV JAVA_HOME /usr/local/jdk1.8.0_351  #配置java环境(固定写法)
ENV CLASS_PATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #配置java环境(固定写法)
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 #配置tomcat环境(固定写法)
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22 #配置tomcat环境(固定写法)
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #配置tomcat环境(固定写法)

EXPOSE 8080 #开发端口

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out #一运行容器就启动tomcat

构建

docker  build -f Dockerfile -t mytomcat .

启动镜像并挂载配置数据卷

docker run -it -d 
--name tomcat01 
-p 3355:8080  
-v /home/cws/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test  
-v /home/sywl/build/tomcat/tomcatlog:/usr/local/apache-tomcat-9.0.22/logs
mytomcat 

#交互
-it
#后台运行
-d
#容器名称
--name tomcat01 
#映射端口
-p 3355:8080 
#配置数据卷到本地的/home/cws/tomcat/test
-v /home/cws/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test 
#日志配置
-v /home/sywl/build/tomcat/tomcatlog:/usr/local/apache-tomcat-9.0.22/logs

image20221124172004102.png

测试挂载是否成功

#进入挂载目录
cd /home/cws/tomcat/test
#新建WEB-INF
mkdir WEB-INF
#编写web.xml配置
vim web.xml

# /home/sywl/build/tomcat/test/WEB-INF/web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">
</web-app>

#cd 出去 test文件夹创建index.html页面
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <h1>测试成功!!!</h1>
    </body>
</html>
#访问
http://192.168.95.128:3355/test/

image20221124173534618.png

docker部署SpringBoot项目

1.安装mysql

#安装mysql
docker install mysql:8

#运行
 docker run -it -d -p 3306:3306 --name sh-mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8

2.idea安装docker插件

作用:dockerfile提示

image20221125133230709.png

3.在项目根目录编写Dockerfile文件

FROM openjdk:8  #基于jdk8

MAINTAINER cws<2411286960@qq.com> #作者信息

COPY *.jar /app.jar #当前目录下的架包拷贝到app.jar

CMD ["--server.port=8900"] #配置命令

EXPOSE 8900 #暴露端口

ENTRYPOINT ["java","-jar","/app.jar"] #运行 java -jar aap.jar

4.进入虚拟机构建容器

docker build -t myapp .  #如果你是以Dockerfile命名的就执行这条

docker build -f 文件名 -t 别名:版本 .  #不是以Dockerfile命名

5.启动容器

docker run -it -d --name app -p 8900:8900  myapp

image20221125141701797.png

6.测试

image20221125141750309.png

docker部署vue项目

安装nginx

#拉取
docker pull nginx
#启动
docker run -it --name mynginx -d nginx
#查看是否启动成功
docker ps 
#将文件复制出来
mkdir /home/staynginx
#进入staynginx
cd /home/staynginx
#创建对应目录--这里也可以在挂载的时候自动去创建
mkdir log
mkdir html
mkdir conf

#复制
docker cp mynginx:/etc/nginx/nginx.conf /home/staynginx/
docker cp mynginx:/etc/nginx/conf.d/default.conf /home/staynginx/conf/

#删除和停止刚启动的容器
docker stop mynginx
docker rm mynginx

#启动并挂载
docker run -it --name mynginx -p 81:80
-v /home/staynginx/conf:/etc/nginx/conf.d 
-v /home/staynginx/nginx.conf:/etc/nginx/nginx.conf 
-v /home/staynginx/html:/usr/share/nginx/html 
-v /home/staynginx/log:/var/log/nginx 
-d nginx

如果使用的是服务器要把安全组打开

image-20221125141750309

查看防火墙是否开启,并开启端口

# 查看firewall服务状态
systemctl status firewall
# 开启、重启、关闭、firewalld.service服务
#开启
systemctl start firewalld.service 
#重启
systemctl restart firewalld
#关闭
systemctl stop firewalld.service 

#重新加载配置
firewall-cmd --reload   

#查看防火墙规则
firewall-cmd --list-all #查看所有信息
firewall-cmd --list-ports #只看端口信息

firewall-cmd --permanent --zone=public --add-port=80/tcp #开启端口
systemctl restart firewalld.service #重启防火墙


#指令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式:端口/通讯协议
--permanent #永久

打包vue项目!

把项目上传到html目录下,访问是否成功!

配置nginx方向代理

server {
    listen  81; // 监听81端口
    server_name localhost; // 因为我的后端和前端都部署到了宝塔上,所以server_name可以直接写localhost
    
    // 配置代理
    /* 
        第一个代理含义:
          我的网站地址是http://120.77.8.124:81/#/login/passLogin,
          当它看到81后的第一条斜杠时会到`/www/wwwroot/120.77.8.124`路径底下找index.html页面
    */
    location / {
        index index.html;
        root /www/wwwroot/120.77.8.124;
    }
    
       /* 
           配置接口代理
               我前端的代理服务器代码块下的图所示。
           ^~/prod-api/:当nginx看到路由中包含/prod-api/会自动将/prod-api/去到,并将/prod-api/前边的部分替换成`http://localhost:15050/`
    */
      location ^~/prod-api/ {
      proxy_pass http://192.144.215.215:8900/;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值