docker环境搭建,docker拉取mysql,docker制作自定义C++镜像

目录

    • centos 安装和使用 docker
    • docker拉取mysql
    • 使用可执行文件制作docker镜像
    • Dockerfile文件优化
      • Dockerfile简介
      • Dockerfile优化

centos 安装和使用 docker

yum install docker
systemctl start docker
systemctl status docker# 查询docker版本
docker version
# 查询docker基础信息
docker info
# docker帮助命令手册
docker --help

docker search 超时问题

# docker search mysql 超时问题,大多是DNS污染造成,无法解析对应ip
# 安装dig软件包
yum install bind-utils
# 查询dns服务器的域名记录,得到ip地址
dig @114.114.114.114 index.docker.io
# hosts文件添加域名解析ip:54.227.20.253 index.docker.io
vim /etc/hosts
# 此时可以执行search查询
docker search mysql

配置国内镜像源

# 使用阿里云docker镜像加速器,https://cr.console.aliyun.com,支付宝扫码登录
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
# 启动配置
systemctl daemon-reload
# 重启docker服务
systemctl restart docker
  • 配置了国内镜像源(比如阿里的docker镜像源)是对search没有用的,因为docker命令最后还是通过他自己的地址搜索镜像。
  • 但是配置了国内镜像源可以加快pull拉去镜像的速度。

docker拉取mysql

docker search mysql
# 拉取最新版本
docker pull mysql
# 拉取指定版本
docker pull mysql:5.7.8# 查看下载好的镜像文件
docker images

docker容器的启动和停止

# 运行容器
docker run --name mysql1 -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 -d mysql
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 停止运行的容器
docker stop [CONTAINER ID]
# 启动docker中的容器
docker start [CONTAINER ID]
# 重启docker容器
docker start [CONTAINER ID]
# 删除容器
docker rm [CONTAINER ID]

进入容器,操作mysql

# 进入容器
docker exec -it [CONTAINER ID]  /bin/bash
# 退出容器
exit
# 进入容器后,登录mysql,输入密码123456
mysql -u root -p
# 查询mysql版本
SELECT VERSION();
# 修改 root 用户在 %(所有主机)上的密码
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
# 授予 root 用户所有数据库的所有权限,并允许该用户授予权限给其他用户。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# 刷新权限,使更改立即生效
FLUSH PRIVILEGES;
# 退出
exit

阿里云服务器mysql远程访问设置

  • 关闭防火墙,或开放3306/tcp端口权限
ufw allow 3306/tcp
  • 阿里云服务器管理页面,添加防火墙规则,开放TCP/3306
  • 设置完成后,使用Navicat(https://www.navicat.com.cn/products)可远程登录阿里云服务器上的mysql

mysql默认4个库

  • 1.information_schema
    用途:这是一个信息数据库,存储了 MySQL 服务器维护的所有其他数据库的信息。例如,它包含了关于数据库中的表、列、索引、用户权限等各种元数据
  • 2.mysql
    用途:主要用于存储 MySQL 的用户账户信息、权限设置、一些存储过程和函数等。它是 MySQL 系统正常运行和安全管理的关键数据库
  • 3.performance_schema
    用途:用于监控 MySQL 服务器的性能相关信息。它提供了一种方式来查看服务器在运行过程中的性能指标,如查询执行时间、锁等待情况、内存使用等细节。
  • 4.sys
    用途:这是一个通过视图和存储过程来帮助数据库管理员更方便地理解和管理 MySQL 服务器的数据库。它是基于information_schema和performance_schema中的数据构建的,提供了更简洁易用的接口来获取数据库系统相关信息。

mysql 基础命令


# 查看MySQL有哪些库
SELECT DATABASES;# 选择information_schema作为当前操作的默认数据库,使用USE指定库后,sql语句可以省略库名
USE information_schema;
# 显示当前库里所有表
SHOW TABLES;# mysql.user 表存储用户账户信息
# User:存储用户名。
# Host:存储允许用户登录的主机地址。可以是具体的 IP 地址、主机名或%(表示允许从任何主机登录)。
# authentication_string:存储用户的密码,可能是加密后的。
SELECT Host, User, authentication_string FROM mysql.user;
# 添加新用户
CREATE USER 'chw'@'localhost' IDENTIFIED BY '123456';
# 修改用户密码
ALTER USER 'chw'@'localhost' IDENTIFIED BY '123';
# 给用户chw在指定主机上授予table_name表的SELECT和INSERT权限
GRANT SELECT, INSERT ON database_name.table_name TO 'chw'@'localhost';# 创建库
CREATE DATABASE school;
# 创建表
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,email VARCHAR(200) UNIQUE
);

使用可执行文件制作docker镜像

使用C++开发的可执行文件nethello制作镜像。在nethello可执行文件目录创建 Dockerfile 文件。

先拉取gcc

docker pull gcc

创建Dockerfile文件

vim Dockerfile
FROM gcc:latest
RUN  mkdir /usr/src/myapp
COPY nethello /usr/src/myapp
WORKDIR /usr/src/myapp
CMD ["./nethello"]

制作docker镜像

# 当前Dockerfile文件目录,创建镜像,tag版本v1,等待一会
docker build -t nethello:v1 .
# 查看镜像,已有nethello
docker images
# 删除镜像
docker rmi nethello:v1
# 启动镜像,不需要传参可直接启动
docker run -d nethello:v1
# 如果启动失败可以查看日志,容器名通过docker ps -a查询
docker logs 容器名
# 启动镜像,可以自定义传参,覆盖Dockerfile里的传参,注意-p 9090:9090端口映射在-d选项的前面
docker run --name nethellov1 -p 9090:9090 -d nethello:v1  ./nethello -s -p 9090 -P
# 查看日志
docker logs nethellov1

镜像打包,拷贝到其他机器运行。
这里的环境:docker在centos制作,拷贝到ubuntu系统正常运行。

# 打包镜像,在当前目录生成nethello.tar
docker save -o nethello.tar nethello:v1# 把镜像文件拷贝到其他机器上,将镜像加载到本地 Docker 环境中
docker load -i nethello.tar
# 查看镜像,已有nethello
docker images
# 参考上面的命令运行docker容器
# 进入容器命令行
docker exec -it da40e6044522 bash
# 查看运行的程序,有nethello
top

Dockerfile文件优化

上面制作的镜像大小1.2GB,太大了,下面对Dockerfile进行优化。

Dockerfile简介

先简单介绍一下Dockerfile。

  • Dockerfile 是一个文本文件,用于自动化构建 Docker 镜像的过程。它包含一系列指令,每个指令都告诉 Docker 如何构建镜像的各个层(layer)。这些指令可以包括设置基础镜像、安装依赖、拷贝文件、配置环境变量、暴露端口、运行命令等操作。
  • 简单来说,Dockerfile 就是 Docker 镜像的构建说明书,类似于一个脚本,定义了镜像如何从头到尾构建和配置。
  • 构建三步骤:编写Dockerfile文件–>docker build命令构建镜像–>docker run依镜像运行容器实例

Dockerfile概要

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
  • 指令按照从上到下,顺序执行,类似脚本。
  • #表示注释。
  • 每条指令都会创建一个新的镜像层并对镜像进行提交。

DockerFile常用保留字指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

  • MAINTAINER:镜像维护者的姓名和邮箱地址

  • RUN:容器构建时需要运行的命令是在 docker build时运行

  • EXPOSE:当前容器对外暴露出的端口

  • WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

  • USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root

  • ENV:用来在构建镜像过程中设置环境变量

  • ADD;将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

  • COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 的文件/目录复制到新的一层的镜像内的 位置

  • VOLUME:容器数据卷,用于数据保存和持久化工作

  • CMD:指定容器启动后的要干的事情

  • ENTRYPOINT:也是用来指定一个容器启动时要运行的命令类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖

  • FROM AS build:在 Docker 17.05 版本引入了多阶段构建(Multi-stage builds)的新特性,FROM as build 就是其中的一部分。多阶段构建允许我们在一个 Dockerfile 中定义多个 FROM 指令,每个指令代表一个构建阶段。这样可以使得镜像更加轻量,同时可以减少构建过程中的依赖。as build 中的 as 是一个别名,可以在后续步骤引用这个别名,方便在不同构建阶段之间传递文件等信息。

  • ARG:ARG指令用于定义可供Dockerfile使用的变量,这些变量在构建时可以传递。与环境变量不同,ARG变量在构建过程结束后不可用,并且在运行时无法访问。

  • ARCH:在一些多架构的场景中,ARCH变量特别重要。它可以帮助我们根据目标架构选择合适的基础镜像或软件下载版本。比如,我们可能需要为不同的硬件架构,如x86和ARM,构建不同的镜像。

Dockerfile优化

还是使用上面的例子,优化后的Dockerfile:
使用FROM AS多阶段构建,第一个FROM拷贝源码并编译,第二个FROM拷贝编译好的可执行文件,制作的docker镜像只包含可执行文件,不包含源码。

FROM ubuntu:20.04 AS build
EXPOSE 6025/tcp
EXPOSE 6025/udpRUN apt-get update && \DEBIAN_FRONTEND="noninteractive" \apt-get install -y --no-install-recommends \build-essential \cmake \vim \wget \gcc \g++ \gdb && \apt-get autoremove -y && \apt-get clean -y && \rm -rf /var/lib/apt/lists/*RUN mkdir -p /opt/workspace
COPY . /opt/workspace/nethello
WORKDIR /opt/workspace/nethelloRUN mkdir -p buildWORKDIR /opt/workspace/nethello/build
RUN cmake  .. && make -j $(nproc)FROM ubuntu:20.04RUN apt-get update && \DEBIAN_FRONTEND="noninteractive" \apt-get install -y --no-install-recommends \build-essential \cmake \vim \wget \gcc \g++ \gdb && \apt-get autoremove -y && \apt-get clean -y && \rm -rf /var/lib/apt/lists/*RUN mkdir -p /opt/workspace/bin/WORKDIR /opt/workspace/bin/
COPY --from=build /opt/workspace/nethello/build /opt/workspace/bin/CMD ["./nethello","-s", "-p", "9090"]

制作过程中的错误解决,升级docker。


# Error parsing reference: "ubuntu:20.04 AS build" is not a valid repository/tag: invalid reference format
# Transaction check error:   file /usr/bin/docker from install of docker-ce-cli# 升级docker版本
yum update
# 卸载旧版本(如果安装过旧版本的话)
yum remove docker  docker-common docker-selinux docker-engine
# yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
yum install docker-ce-17.12.0.ce

构建镜像

# 先拉取基础镜像
docker pull ubuntu:20.04
# 开始构建镜像
docker build -t nethello:v2 .
# 查看镜像
docker images
# 运行容器
docker run --name nethellov2 -p 9090:9090 -d nethello:v2

重新制作的镜像只有531MB,比原来的1.24GB小很多。
在这里插入图片描述
成功运行的容器。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025牛客寒假算法营2

A题 知识点&#xff1a;模拟 打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写&#xff0c;我们可以反过来&#xff0c;检查这七个整数是否不为 4 和 7。 时间 O(1)&#xff1b;空间 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…

STM32 FreeRTOS中断管理

目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…

【ComfyUI】python调用生图API,实现批量出图

官方给的示例&#xff1a; https://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyU…

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的&#xff0c;但它相较于其他数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;会复杂一些&#xff0c;因为 Oracle 数据库有一些特定的要求&#xff0c;如操作系统和库的依赖&#xff0c;以及许可证问题。 不过&#xff0c;Ora…

macos的图标过大,这是因为有自己的设计规范

苹果官方链接&#xff1a;App 图标 | Apple Developer Documentation 这个在官方文档里有说明&#xff0c;并且提供了sketch 和 ps 的模板。 figma还提供了模板&#xff1a; Figma

告别手动编辑:如何用Python快速创建Ansible hosts文件?

在自动化运维领域&#xff0c;Ansible是一款非常强大的工具&#xff0c;它可以帮助我们管理和配置大量的服务器。为了让Ansible能够有效地管理这些服务器&#xff0c;我们需要一个hosts清单文件&#xff0c;该文件定义了Ansible要管理的目标主机。在实际应用中&#xff0c;我们…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…

【嵌入式】总结——Linux驱动开发(三)

鸽了半年&#xff0c;几乎全忘了&#xff0c;幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的&#xff0c;本篇与前两篇一样&#xff0c;重点在于使用、快速体验&#xff0c;uboot、linux、根文件系统不作深入理解&#xff0c;能用就行。 重新梳理一下脉络&#xff0c;本…

【29】Word:李楠-学术期刊❗

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片&#xff0c;对应位置填入对应文字 (手动调整即可&#xff09;复制样式&#xff1a;开始→样式对话框→管理…

ThinkPHP 8请求处理-获取请求对象与请求上下文

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…

某书x-s 、x-t 算法 python纯算56版本

文章目录 声明iv的获取key的获取python 算法还原声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! xhs xs自从2023年5月31号更新之后直到2024年7月之前好像就没有再怎么更新了 但是7月之…

【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据

记录自己开发的一个SQL聚合工具 功能介绍&#xff1a; 文本加引号 给多行文本前后添加引号&#xff0c;并用逗号连接&#xff0c;直接复制到 sql 中的 in 条件中 Excel转SQL 适用于将Excel表格的数据&#xff0c;批量导入到数据库的场景 此工具能快速将excel表格转换为i…

Linux安装mysql5.7

CentOS7安装MySQL&#xff08;完整版&#xff09; - oldmonk - 博客园 下载|安装 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm使用上面的命令就直接下载了安装用的Yum Repository&#xff0c;大…

汽车定速巡航

配备定速巡航功能的车型&#xff0c;一般在方向盘附近设有4~6个按键&#xff08;可能共用键位&#xff09;。 要设置定速巡航&#xff0c;不仅需要方向盘上的按键&#xff0c;还要油门配合。 设置的一般流程&#xff1a; 开关&#xff1a;类似步枪上的“保险”&#xff0c;按…

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描&#xff0c;快速检测&#xff1a;高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着…

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…

利用 SAM2 模型探测卫星图像中的农田边界

将 Segment Anything Model Version 2 应用于卫星图像以检测和导出农业地区田地边界的分步教程 &#x1f31f; 简介 手动绘制田地边界是最耗时的任务之一&#xff0c;其准确性取决于绘制者的表现。然而&#xff0c;精确的边界检测在很多领域都有应用。例如&#xff0c;假设您…

初步搭建并使用Scrapy框架

目录 目标 版本 实战 搭建框架 获取图片链接、书名、价格 通过管道下载数据 通过多条管道下载数据 下载多页数据 目标 掌握Scrapy框架的搭建及使用&#xff0c;本文以爬取当当网魔幻小说为案例做演示。 版本 Scrapy 2.12.0 实战 搭建框架 第一步&#xff1a;在D:\pyt…

人脸识别打卡系统--基于QT(附源码)

逃离舒适区 项目源代码放在我的仓库中&#xff0c;有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…

微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)

文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用&#xff1f;其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结&#xff1a; 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…