Docker安装和使用,Docker拉取Mysql.

news2024/11/16 3:46:30

Docker

  • Unbuntu安装docker
  • docker的相关操作
    • 开启docker服务
    • 查看镜像
    • 搜索镜像
    • 拉取镜像
    • 删除镜像
    • 运行容器
    • 查看容器
    • 停止运行容器
    • 重新运行容器
    • 删除容器
    • 构建一个Docker镜像
    • 登陆Dockerhub
    • 提交镜像到dockerhub
    • 退出dockerhub
    • 进入正在运行的容器的交互式终端
    • 其他docker操作
  • docker拉取mysql
  • mysql的相关操作

作者只是个docker入门新手,有些地方可能有误

Unbuntu安装docker

一开始我是想使用

yum -y install docker

这个命令安装docker的,但是这个命令对Unbuntu操作系统不适用
原因是在 Ubuntu 操作系统中,yum 命令并不是默认的软件包管理器。yum 命令主要用于基于 Red Hat 系列(如 CentOS、Fedora)的发行版。而在 Ubuntu 中,使用的是 apt 命令进行软件包管理。
所以可以使用以下方法:
1.更新apt软件库

sudo apt-get update

2.安装存储库

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

3.下载证书

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4.apt添加docker的下载位置并使用阿里云镜像

add-apt-repository \
   "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

注意此步骤需要在root用户下进行
4.1(切换到root用户)
Unbuntu可能默认没有设置root的用户的密码,所以说如果使用

su root
123456

的方式,密码是不正确的,可以使用如下方式进入root用户

sudo -i

获取管理员权限之后,使用

passwd root

设置root用户的密码,然后就可以使用su root直接进入root用户

5.再次更新apt软件库

sudo apt-get update

6.用apt安装docker

sudo apt-get install docker-ce docker-ce-cli containerd.io

7.验证是否安装成功

docker --version

docker的相关操作

开启docker服务

systemctl start docker
systemctl start docker.service

二者是相同的命令,是因为 .service后缀是可以省略的
开启服务后,使用

docker version

即可看到对应的服务器和客户端.
值的一提的是,即便你没有使用这个命令,在大部分情况下,也是可以正常使用docker的.
因为该命令的目的是手动启动 Docker 引擎
但是当你使用docker的其他命令时,如:

docker pull 镜像名

Docker 客户端会自动连接到 Docker 引擎并执行相应的操作
所以说大多数情况下,是不需要我们手动开启Docker服务的,Docker命令会自动帮助我们连接Docker引擎.

以下是一些可能需要手动启动 Docker 引擎的情况:

1.系统启动后 Docker 引擎未自动启动:在某些配置中,Docker 引擎可能未设置为自动启动。如果你在系统启动后需要使用 Docker,但发现 Docker 引擎未运行,则可以使用 sudo systemctl start docker 命令手动启动它。

2.Docker 引擎异常停止:在某些情况下,Docker 引擎可能会异常停止,导致无法执行 Docker 相关操作。如果你尝试使用 Docker 命令时遇到连接错误或无法响应的情况,可以尝试先停止 Docker 引擎(使用 sudo systemctl stop docker 命令),然后再启动它(使用 sudo systemctl start docker 命令)。

3.需要以管理员权限运行 Docker:在某些 Linux 系统上,执行 Docker 命令可能需要管理员权限。如果你尝试执行 Docker 命令时遇到权限错误,可以使用 sudo 命令以管理员身份运行命令,例如 sudo docker pull。

成功启动docker服务后,我们可以通过

systemctl status docker
systemctl status docker.service

来查看docker的启动状态.


查看镜像

我们刚刚下载好的docker里面是什么镜像都没有的
我们可以使用

docker images

来查看docker镜像
*但是有时候我们在刚下好docker之后,使用docker images命令查看镜像时会爆出错误:“permission denied while…”
这是因为当前用户的权限不够,你需要把当前用户放入docker的用户组之中

sudo usermod -aG docker 用户名

这样普通用户也可以直接使用docker命令了


搜索镜像

docker search 镜像名

拉取镜像

docker pull 镜像名

*拉取失败,如何解决:
如果系统提示
在这里插入图片描述
可以按照如下方法解决:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

之后就可以正常拉取镜像了

docker imgaes

查看拉取到的镜像↑

删除镜像

docker rmi 镜像名

删除的时候需要带上版本,如果不带版本默认删除latest版本

docker rmi 镜像名:版本

运行容器

运行容器

docker run 镜像名

后台运行容器

docker run -d 镜像名

这二者的区别是一个是前台运行容器,一个是后台运行容器
如果是前台运行容器的话,会直接把容器的执行结果打印在终端上,并会占用控制台,但是如果是后台运行的话,容器将在后台(守护进程模式)运行,不会将容器的输出直接打印到终端。容器将以守护进程的形式在后台运行,并且不会占用当前终端的控制权。你可以继续在终端中执行其他命令而不受容器的影响

运行容器时给容器起名

docker run --name 容器名 镜像名

–name是给生成的容器起一个名字,如果不用–name的话,生成的容器可能是一个随机生成的名字,不方便阅读.

运行容器并且绑定端口

docker run -p  主机上端口号:容器内部端口号 镜像名
docker run -p 3306:3306 images

具体来说,通过端口映射,你可以将容器内部的应用程序绑定到主机上的一个特定端口,使得主机上的其他进程或外部系统可以通过该端口与容器内的应用程序进行交互。这种机制允许容器内的应用程序提供网络服务,同时可以通过主机的网络接口进行访问。
例如,如果容器内运行着一个Web服务器,你可以使用端口映射将容器的Web服务器绑定到主机的某个端口,然后通过在主机上访问该端口,即可访问到容器中的Web服务器。这样,主机上的用户或其他系统就可以通过主机的IP地址和映射的端口与容器内的Web服务器进行通信。

比如说现在有一个mysql的容器,如果不绑定端口的话,那么它就仅仅是个mysql而不能跟主机上的其他程序交互,如果我给它绑定一个端口,我就可以写一个跟数据库连接的项目.

运行时进行宿主机和容器的挂载

docker run -v 用于将宿主机(Host)的目录或文件挂载到容器中的指定路径上。这样可以实现宿主机和容器之间的文件共享。

docker run -v  宿主机目录或文件的路径:容器中文件的目录或路径  镜像名

设置容器内的环境变量

docker run -e 环境变量名称=要设置的值 镜像名

例如:我将mysql容器中的密码设置为 123456

docker run -e MYSQL_ROOT_PASSWORD=123456 mysql 5.7

查看容器

列出所有正在运行的容器

docker ps

查看所有的容器

docker ps -a

停止运行容器

docker stop 容器id

重新运行容器

docker restart 容器id

删除容器

删除一个停止的容器

docker rm 容器id

构建一个Docker镜像

docker built -t 镜像名 dockerfile的路径
docker built -t hello-docker .

上面这个例子是我创建一个名字为 hello-docker 的镜像 “.”是dockerfile的路径

接下来的步骤将说明如何简单的自己创建一个镜像

cd ~
mkdir -p dockerWorkspace
cd dockerWorkspace
touch sunjin.sh    //创建一个shell脚本
chmod 777 sunjin.sh  //给shell脚本加权限才能运行
vim sunjin.sh      //编辑这个脚本

脚本的内容,随便写点东西

echo "hello,sunjin"
touch Dockerfile
vim Dockerfile

Dockerfile文件内容:

From alpine:latest                
ADD ./sunjin.sh /sunjin.sh   #将本地的 sunjin.sh文件复制到镜像中的
RUN chmod + x /sunjin.sh     #允许在容器内部执行命令
CMD ["/bin/sh","-c","sunjin.sh"]

built -t就是通过Dockerfile文件中的内容进行构建的

docker built  -t 镜像名 dockerfile路径

Dockefile板子示例

# 使用镜像 ubuntu:latest
FROM ubuntu:latest

#将本地文件,目录的内容复制到镜像中
ADD <src> <dest>
#其中src是本地的源文件或者目录,dest是镜像中的目标路径

# 安装必要的软件包
RUN apt-get update && apt-get install -y \
    software-package1 \
    software-package2

# 拷贝文件到镜像中
COPY ./app /app

# 设置工作目录
WORKDIR /app

# 运行启动命令
CMD ["python", "app.py"]

登陆Dockerhub

docker login -u 账号 -p 密码

但是有些系统比如Unbuntu可能会有这样的提示
在这里插入图片描述
这是在提示你,直接将密码放在命令行中运行的方式并不安全,建议你将密码存在一个文件之中,然后用文件传输的方式输入密码.

查看自己的登陆信息

docker info

其中,username会显示你的用户名

搜索dockerhub上的库

docker search 关键字

提交镜像到dockerhub

给镜像打标签设置版本

docker tag 原镜像的id 新镜像名:版本
docker tag 原镜像名:版本 新镜像名:版本

我们在提交镜像之前,必须要先给镜像打标签,标明推入的仓库以及版本

docker tag 原镜像名:版本 用户名/仓库名:版本

我将mysql镜像换了一个名字并设置版本为1.0版本

docker tag c20987f18b13 my_mysql:1.0

这里标明mysql 5.7要被推入sunjin033/sunjin033中,版本为1.0

docker tag mysql:5.7 sunjin033/sunjin033:version_1.0

将镜像提交到个人仓库

docker push 用户名/库名:版本
docker push sunjin033/sunjin033:version_1.0

然后系统就会将我的 sunjin033/sunjin033:version_1.0提交到dockerhub上

退出dockerhub

docker logout

进入正在运行的容器的交互式终端

docker exec -it <container_id> bash

这样就可以正式的使用容器了

其他docker操作

查看容器日志

docker logs <container_id>

复制文件或目录到容器中

docker cp <local_path> <container_id>:<container_path>

复制容器中的文件或目录到主机中

docker cp <container_id>:<container_path> <local_path>

docker拉取mysql

1.先拉取一个mysql镜像

docker pull mysql:5.7

2.创建实例并且绑定端口

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

分析

  1. -d后台运行,不占用控制台
  2. -p绑定容器的端口,将主机的3306和容器的3306绑在一起
  3. -v进行文件的挂载,可以让宿主机和容器共享数据,使用数据卷
  4. -e设置容器的环境变量,将mysql的密码设置为123456
  5. –name 给容器起一个别名,方便阅读

3.进入已经创建好的mysql容器之中

docker exec -it <container-name> bash
docker exec -it mysql容器的ID bash
docker exec -it mysql bash

4.输入mysql的密码,即可成功进入mysql

mysql -u root -p

紧接着输入mysql的密码123456即可出现mysql的控制台
在这里插入图片描述
我们就可以在这里通过sql语句愉快的使用mysql了

Docker数据卷
*值的一提的是,Docker中的数据是临时的,如果我们将一个已经实例化好的mysql容器删除了,再重新创建一个mysql容器的话,那么之前mysql中的数据就会消失.

如果要保留 MySQL 数据,你可以使用 Docker 的数据卷(volumes)来持久化存储 MySQL 容器中的数据。通过挂载数据卷,可以将容器内的数据存储到宿主机上的指定目录中。

docker run -d -v /path/on/host:/var/lib/mysql --name mysql_container -e MYSQL_ROOT_PASSWORD=your_password mysql:tag

mysql的相关操作

进入这步的前提是你已经进入了mysql的控制台中,下面我将介绍几个简单的sql语句.

ps:记住,所有的sql语句在末尾都要加一个;表示结束!!!!
1.查看所有的数据库

show databases;

2.进入某个数据库,如果你想从某个数据库切换到另一个数据库,也是直接用这个命令.

use 数据库名;

3.查看这个数据库中所有的表

show tables;

4.查看某个表的表结构

desc 表名;

5.查看某个表的全部信息

select * from 表名;

6.创建一个表

CREATE TABLE users (
    id INT PRIMARY KEY,      
    name VARCHAR(50),
    age INT
);

其中primary key表示为主键.
7.向标准插入一条数据

INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 25);

8.退出mysql

exit;

退出容器

exit

如果在退出容器时,系统报错 “There are stopped jobs” 提示,这意味着你可能有一些已停止的作业在后台运行。
你可以尝试使用以下命令来清除后台作业:

jobs -l

这将列出后台运行的作业及其作业号。然后,使用 kill 命令加上作业号来终止该作业,例如:

kill %1

将 %1 替换为实际的作业号。

其他基本操作请参考基本的sql语句,这里就不再细说了.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qemu arm Linux 环境测试交叉编译的 glib 库 测试用例 tests

环境搭建 ubuntu 20.04 arm 平台交叉编译 glib 库 交叉编译 glib 库 glib 库 本身带有大量的测试用例 tests&#xff0c;分别在 glib 各个模块目录下的 tests 目录&#xff0c;如果是 ARM Linux 平台的交叉编译&#xff0c;可以开启 installed_tests 选项 开启 glib tests 测…

2.pixi.js编写的塔防游戏(类似保卫萝卜)-场景编辑器

游戏说明 一个用pixi.js编写的h5塔防游戏&#xff0c;可以用electron打包为exe&#xff0c;支持移动端&#xff0c;也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

一种正弦信号叠加高频噪声的信号基频率准确测量方法

1.问题 当信号叠加有高频噪声时&#xff0c;特别是类似有变频器这类强干扰源存在的情况下&#xff0c;如何测得信号的准确频率&#xff0c;是个问题。FFT要求长时间采样&#xff0c;对于嵌入式应用&#xff0c;采样点数和时间消耗都是个问题。而即使用示波器的波形叠加功能&…

Debian12 U盘安装

今天买了一个蓝牙适配器&#xff0c;想着在我的Centos7上把这个蓝牙使用起来&#xff0c;但遗憾的是即使经过淘宝客服的远程操作也无法正常使用起来&#xff0c;原因是我的Centos版本太低&#xff0c;有些头文件缺失内容导致编译不过&#xff0c;然后蓝牙驱动无法正常安装。在客…

【八】spring boot集成数据库连接池druid

spring boot集成数据库连接池druid 最近在进行程序优化的过程中发现程序瓶颈在数据库连接这块&#xff0c;于是开始研究怎么对数据库连接池参数进行调优&#xff0c;在这个过程中发现很多人使用druid很不规范&#xff0c;经常会出现导入的包和配置参数不对应的情况&#xff0c;…

Mybatis-Plus《学习笔记(22版尚硅谷)》

一、MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档&…

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon&#xff1f; Ribbon就是netflix公司的一个开源项目&#xff0c;主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项&#xff0c;如连接超时&#xff0c;重试等等。Ribbon作为服务消费者的负载均衡器&#xff0c;有两种使用方式&…

LeetCode 2481. Minimum Cuts to Divide a Circle【数学,几何】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

AMD——CPU微架构分析

一、SoC架构 1.1 整体架构 Zeppelin 参考链接&#xff1a;wikichip: Zeppelin 通过infinity fabric总线将单die分成多die的SoC架构&#xff0c;每个Die包含两个CPU核&#xff08;CCX&#xff09;、2各DDR通道、USB、低功耗IO以及多个IFOP和IFIS serdes接口。 如下所述中&…

【Python 随练】三数字排序

题目&#xff1a; 输入三个整数 x, y, z&#xff0c;请按照从小到大的顺序输出这三个数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用Python代码解决一个简单的排序问题&#xff1a;如何将输入的三个整数按照从小到大的顺序进行排序并输出。我们将提供问题的解析…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 139.单词拆分 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的&#xff0c;01背包的物品数量只有一个 完全背包和01背包分许步骤一样&#xff0c;唯一不同就是体现在遍历顺序上…

JVM内存分析:Aviator低版本内存泄漏问题分析

目录 1.频繁FullGC告警 2.堆转储操作生成dump文件 3.利用MAT工具分析dump文件 3.1 大对象视图分析内存泄漏原因 3.2 Aviator框架中什么地方用到ThreadLocal&#xff1f; 3.3 fnLocal为什么存在内存泄漏&#xff1f; 3.4 LambdaFunctionBootstrap为什么没有释放&#xff…

002mavenSettings配置

Maven –Settings 官网说明https://maven.apache.org/guides/mini/guide-mirror-settings.html 官网说明 模板 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"htt…

【Redis】持久化机制

一、三种持久化机制 RDF快照&#xff1a;通过某一时刻的快照&#xff0c;将数据以二进制形式永久存储在磁盘中。AOF&#xff1a;将每个修改命令通过write函数追加到文件中。混合持久化&#xff1a;AOF重写时&#xff0c;将重写这一刻之前的内存做RDB快照存储&#xff0c;并将此…

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12942 喜欢我的前端组件分享文章的&#xff0c;帮忙加个关注&#xff0c;非常感谢&#x1f64f;&#x1f64f; 效果图如下: #### 使用方法…

StarRocks 文章收集

StarRocks在58的实践 StarRocks在58的实践 - 墨天轮StarRocks在58的实践 --2022-06-08https://www.modb.pro/db/639611 StarRocks之系统架构 StarRocks之系统架构 - 墨天轮https://www.modb.pro/db/610300 StarRocks小规模集群部署最佳实践(1/2) 0016.S StarRocks小规模集…

JDBC 2023年最新学习笔记!

课程笔记说明 我的笔记是来源于尚硅谷的赵伟风老师的2023年最新版jdbc的课程 视频链接&#xff1a; 尚硅谷JDBC实战教程&#xff08;2023最新版jdbc&#xff0c;JDK17MySQL8&#xff09;_哔哩哔哩_bilibili 课程资料&#xff1a; 关注“尚硅谷教育”&#xff0c;后台回复J…

中年“难”人

对于每个打工人而言&#xff0c;人生无外乎两种状态&#xff0c;要么已是中年人&#xff0c;要么走在成为中年人的路上&#xff0c;可是当下横空出世的中产作死三件套&#xff0c;让每个打工人都不寒而栗 - 房贷近千万&#xff1b; 配偶不上班&#xff1b; 两娃上国际。 这个…

走在时代前沿:宝洁的柔性供应链战略及其对全球快消品市场的影响

01 先进的供应链计划不断推动宝洁引领全球快速消费品市场 宝洁公司&#xff08;Procter & Gamble&#xff09;成立于1837年&#xff0c;是全球知名的消费品公司&#xff0c;公司拥有多个知名品牌&#xff0c;如宝洁、海飞丝、汰渍、奥妙、潘婷、威露士等&#xff0c;这些产…

程序员必须掌握的消息中间件-RabbitMQ

一、Rabbit 概述 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用中间共享数据&#xff0c;RabbitMQ 是使用 Erlang 语言来编写的&#xff0c;并且 RabbitMQ 是基于 AMQP 协议的。 特点&#xff1a; 开源、性能优秀 Erlang 语言最初用…