docker在linux上的安装与使用

我的操作系统centos7本地vm

docker安装

1、卸载旧版本

如果系统中已经存在旧的Docker,则先卸载

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2、配置一个Docker的yum仓库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4、启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

5、配置镜像

注册阿里云账号

首先访问阿里云网站:阿里云-计算,为了无法计算的价值注册一个账号

在首页的产品中,找到阿里云的容器镜像服务

页面向下滚动,即可找到配置的文档说明:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

docker使用

安装mysql

docker run -d \
>   --name mysql \
>   -p 3306:3306 \
>   -e TZ=Asia/Shanghai \
>   -e MYSQL_ROOT_PASSWORD=123 \
> mysql

 

查看docker安装的容器

docker ps

docker 打包

docker save -o nginx.tar nginx:latest

 删除镜像

docker rmi nginx:latest

加载

docker load -i nginx.tar

 dockerfile构建镜像

docker build -t docker-demo .

 

查看镜像 

docker images

创建容器并且运行

docker run -d --name nginx -p 80:80 nginx

 查看进程

docker ps

# 也可以加格式化方式访问,格式会更加清爽

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 

 停止容器

docker stop nginx

查看所有容器

docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

运行容器

docker start nginx

查看容器详细信息

docker inspect nginx

进入容器,查看容器内目录

docker exec -it nginx bash

 查看容器中的目录

ls -l

退出

exit

进入MySQL并且使用mysql客户端

docker exec -it mysql mysql -uroot -p

删除容器

docker rm nginx

强制删除容器

docker rm -f nginx

查看日志

docker logs nginx

持续查看日志

docker logs -f nginx

 起别名

vi ~/.bashrc
alias dps='docker ps --format "table{{.ID}}\t{{.Image}}\t{{.Ports}}\t{{Status}}\t{{.Names}}"'
alias dis='docker images'
source ~/.bashrc

数据卷命令

创建数据卷

docker volume create

查看所有数据卷

docker volume ls

删除指定数据卷

docker volume rm

查看某个数据卷详情

docker volume inspect

清除数据卷

docker volume prune

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

cd /var/lib/docker/volumes/html/_data

 

mysql容器本地挂载

基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(

挂载/root/mysql/data到容器内的/var/lib/mysql目录 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件 

mkdir mysql
cd mysql/
mkdir data
mkdir conf
mkdir init
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

dockerfile自定义镜像 

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

官网文档: https://docs.docker.com/engine/reference/builder 

 dockerfile构建镜像

docker build -t docker-demo .

 运行镜像

docker run -d --name dd -p 8080:8080 docker-demo

 查看日志 dd是容器名称

docker logs -f dd

 网络网桥

 创建网络

docker network create 网络名称

 连接

docker network connect 网络名 容器名

容器创建并且连接网络

docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称

访问ping 容器名称 

nginx 静态资源挂载

docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx

Docker Compose

Docker Compose通过一个单独的docker-compose,yml 模板文件(YAML格式)来定义一组相关联的应用容器帮
助我们实现多个相互关联的Docker容器的快速部署。

 docker-compose.yml 文件

# Docker Compose 文件版本,这里使用的是 3.8 版本  
version: "3.8"  
  
# 定义服务  
services:  
  
  # MySQL 服务  
  mysql:  
    # 使用官方的 MySQL 镜像  
    image: mysql  
    # 设置容器的名称为 mysql  
    container_name: mysql  
    # 端口映射,将宿主机的 3306 端口映射到容器的 3306 端口  
    ports:  
      - "3306:3306"  
    # 环境变量,设置时区为中国上海,并设置 MySQL root 用户的密码为 123  
    environment:  
      TZ: Asia/Shanghai  
      MYSQL_ROOT_PASSWORD: 123  
    # 卷挂载,将配置文件、数据文件和初始化脚本分别挂载到容器内的相应目录  
    volumes:  
      - "./mysql/conf:/etc/mysql/conf.d"  
      - "./mysql/data:/var/lib/mysql"  
      - "./mysql/init:/docker-entrypoint-initdb.d"  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
  
  # 自定义服务 hmall  
  hmall:  
    # 使用当前目录下的 Dockerfile 构建镜像  
    build:   
      context: .  
      dockerfile: Dockerfile  
    # 设置容器的名称为 hmall  
    container_name: hmall  
    # 端口映射,将宿主机的 8080 端口映射到容器的 8080 端口  
    ports:  
      - "8080:8080"  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
    # 依赖 MySQL 服务,确保 MySQL 服务启动后再启动 hmall 服务  
    depends_on:  
      - mysql  
  
  # Nginx 服务  
  nginx:  
    # 使用官方的 Nginx 镜像  
    image: nginx  
    # 设置容器的名称为 nginx  
    container_name: nginx  
    # 端口映射,将宿主机的 18080 和 18081 端口分别映射到容器的 18080 和 18081 端口  
    ports:  
      - "18080:18080"  
      - "18081:18081"  
    # 卷挂载,将自定义的 Nginx 配置文件和 HTML 目录挂载到容器内的相应目录  
    volumes:  
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"  
      - "./nginx/html:/usr/share/nginx/html"  
    # 依赖 hmall 服务,确保 hmall 服务启动后再启动 Nginx 服务  
    depends_on:  
      - hmall  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
  
# 定义网络  
networks:  
  # 创建一个名为 hm-net 的网络,并在服务的 networks 中引用它  
  hm-net:  
    # 设置网络的名称,这里使用 'hmall' 加上 '网络' 的描述性名称  
    name: hmall-net

 运行

docker compose up -d

 结束

docker compose down  

项目部署流程

mysql数据卷自定义挂载

docker run -d \
  --name 容器名称 \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \  //数据
  -v /root/mysql/conf:/etc/mysql/conf.d \   //配置文件
  -v /root/mysql/init:/docker-entrypoint-initdb.d \ //脚本
  镜像名称
// mysql
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

 创建网络

docker network create 网络名称

 连接将要用的环境容器连接到同一个网络比如mysql容器

docker network connect 网络名 容器名

关键yml

项目打包mvn package

dockerfile

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

 构建镜像 

docker build -t 镜像名称 .

 容器创建并且连接网络

docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称

nginx配置文件挂载

自己的静态资源放/root/nginx/html中

/root/nginx/下放nginx.conf

nginx 容器创建运行并且挂载网络连接

docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx

nginx.conf


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       18080;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/静态资源文件夹1;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://项目容器名称:8080;
        }
    }
    server {
        listen       18081;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/静态资源文件夹2;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://项目容器名称:8080;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/585704.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 音视频基础知识

本系列文章会介绍两个 Android NDK Demo&#xff0c;拉流端会实现一个基于 FFmpeg 的视频播放器 Demo&#xff0c;推流端会实现一个视频直播 Demo&#xff0c;当然在做 Demo 之前会介绍音视频的基础知识。以下是本系列文章的目录&#xff1a; Android 音视频基础知识 Android 音…

【langchain】快速封装替换自定义LLM(基于自定义API或本地模型)

1. 引言 你可能已经注意到&#xff0c;LLM时代下的许多项目&#xff08;特别是Github上的论文项目、工程项目&#xff09;都要求我们设置OpenAI的API Key&#xff0c;就像这样&#xff1a; os.environ["OPENAI_API_KEY"] "sk-"from langchain_openai im…

SDKMAN!

概述 官网&#xff0c;SDKMAN是一款管理多版本SDK的工具&#xff0c;可以实现在多个版本间的快速切换。 其他特性&#xff1a; 易用&#xff1a;安装SDK不再需要去Google想安装的某个软件的官网的下载页&#xff0c;或找其他下载页面&#xff0c;然后下载安装包、解压、设置…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架&#xff0c;由果糖大数据科技团队维护和更新 &#xff0c;开箱即用最易上手的ORM 优点 &#xff1a;【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

Eclipse MAT工具分析内存溢出

1、通过dominator_tree可以查看哪些对象大 可以看到com.codex.terry.entity.User对象有57万个 2、打开thread_overview查看内存溢出的代码

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传&#xff0c;滑动窗口&#xff0c;流量控制&#xff0c;拥塞控制 TCP重传机制&#xff1a; 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传&#xff1a; 超过指定时间没有收到确认应答报文&#xff0c;就会重发该数据 触发超时重传的情况…

(十四)Servlet教程——Servlet中HttpSession的使用

除了使用Cookie&#xff0c;Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制&#xff0c;相应地也增加了服务器的存储压力。 1. 什么是Session Session是另外一种记录客户端状态的机制&#xff0c;不同的是Cookie保存在客户…

2024年618哪些数码家电值得入手?热门家电好物抢先看!

618购物狂欢节即将来临&#xff0c;这是一年一度的大促销活动&#xff0c;家电和数码产品在这个时间段内通常都会有优惠和折扣。但随着产品的多样化&#xff0c;很多时候一款产品就有多款品牌&#xff0c;在这不同品牌又各自擅长不同的东西&#xff0c;看着眼花缭乱。今天我就给…

基于python+django网易新闻+评论的舆情热点分析平台

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

Java中优雅实现泛型类型的强制转换

在Java中经常遇到将对象强制转换成泛型类的情况&#xff1a; Map<String, Object> data Map.of("name", "XiaoMing","age", 17,"scores", List.of(80, 90, 70) );List<Integer> scores (List<Integer>) data.get…

Docker容器添加修改端口映射的方法与详细步骤

1、先找到要修改的容器hash值&#xff1a; 2、然后退出docker Desktop服务 &#xff08;因为在线状态配置文件修改保存不了&#xff09; 3、资源管理器中打开最新安装的Docker的配置文件的路径&#xff1a; 4、打开后修改其中的 config.v2.json 和 hostconfig.json 5、启动…

【C++】哈希表的底层逻辑

目录 一、哈希概念 1、哈希冲突 2、哈希冲突的解决 a、闭散列 &#x1f7e2;插入 &#x1f7e2;查找 &#x1f7e2;删除 &#x1f7e2;其他类型的数据 &#x1f7e2;实现 b、 开散列 &#x1f7e2;插入 &#x1f7e2;查找 &#x1f7e2;删除 &#x1f7e2;析构 &a…

《霍格沃茨之遗》找不到emp.dll如何修复?分享5种亲测有效的方法

在我们享受电脑游戏带来的乐趣时&#xff0c;偶尔会遇到一些技术上问题&#xff0c;具体来说&#xff0c;当你启动一款游戏&#xff0c;系统却弹出一个提示“由于找不到emp.dll文件&#xff0c;因此无法继续执行代码”&#xff0c;这样的情况确实让人感到扫兴。这究竟是什么原因…

.net core ef 连表查询

Information和TypeInfo连表查询 类似&#xff1a; select st.Title1,si.* from [Star_Information] si left join Star_TypeInfo st on si.typeId2st.id 先在EfCoreDbContext.cs配置 protected override void OnModelCreating(ModelBuilder builder){base.OnModelCreating(b…

Jupyter Notebook 中使用虚拟环境的Python解释器

问题&#xff1a;创建虚拟环境&#xff0c;在pycharm中配置虚拟环境的Python解释器&#xff0c;然后在pycharm中打开ipynb&#xff0c;执行发现缺少包&#xff0c;但是虚拟环境中已经安装了 解决方式&#xff1a; 配置Jupyter Notebook 使用虚拟环境的Python解释器 1&#x…

ElasticSearch总结2

一、创建索引库&#xff1a;PUT ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下&#xff1a; 整个jason 里边&#xff0c;它有一个叫mapping的属性&#xff0c;代表的是映射。映射里边有properties代表就是字段。可以看到这…

C++入门系列-缺省参数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 缺省参数的概念 缺省参数是生命或者定义函数时为函数的参数指定一个缺省值&#xff0c;在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用…

一单利润100+,不起眼的小生意,却能闷声发财!

今天&#xff0c;我想向大家介绍一个看似不太热门&#xff0c;但实际上需求很高的项目——酒店代订。这个项目其实很早以前就已经有人开始尝试了&#xff0c;但可能并没有被大众所熟知。简而言之&#xff0c;酒店代订就是帮助他人通过我们来预订他们想要入住的酒店。 当客户将…

ThinkPHP5 SQL注入漏洞敏感信息泄露漏洞

1 漏洞介绍 ThinkPHP是在中国使用极为广泛的PHP开发框架。在其版本5.0&#xff08;<5.1.23&#xff09;中,开启debug模式&#xff0c;传入的某参数在绑定编译指令的时候又没有安全处理&#xff0c;预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式&#xff0c…