Docker安装、常见命令、安装常见容器(Mysql、Redis等)

news2024/9/29 23:39:34

目录

一、Docker安装

二、Docker常见命令

2.1 镜像命令

2.2 容器命令

2.3 总结

2.4 容器挂载-容器卷技术

三、Docker安装mysql容器

3.1 下载镜像文件

3.2 创建实例并启动

3.3 MySQL 配置

3.4 进入容器文件系统

四、Docker安装Redis


一、Docker安装

官网安装指引:Install Docker Engine on CentOS | Docker Documentation

# 0. 安装前先更新yum,不然有可能出现本机无法连接虚拟机的mysql、redis等
sudo yum update
​
# 1. 卸载之前的docker   (注意:\复制的时候可能存在问题,建议手敲这部分)
sudo 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 \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache 
​
# 4. 安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
# 5. 启动docker
systemctl start docker
# 6. 使用docker version查看是否按照成功
docker version
# 7. 设置开机自启动docker服务
systemctl enable docker

配置阿里云镜像加速

地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

 

# 配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://n6lhbngn.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、Docker常见命令

官网:docker | Docker Documentation

2.1 镜像命令

docker images   #查看所有本地主机上的镜像
docker pull 镜像名称[:tag]  #下载镜像,如果不写tag,默认就是latest最新版本
docker rmi -f 镜像id  #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id   #删除指定的镜像
docker rmi -f $(docker images -aq)  #删除全部的镜像

docker拉取的镜像默认都来自https://hub.docker.com/

举例:

#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
mysql        8.0       3218b38490ce   9 months ago   516MB
​
#删除指定镜像
[root@VM-16-11-centos mydata]# docker rmi -f 3218b38490ce
Untagged: mysql:8.0
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
​
#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
​
#下载镜像
[root@VM-16-11-centos mydata]# docker pull mysql:8.0
8.0: Pulling from library/mysql
72a69066d2fe: Already exists  #分层下载: docker image 的核心 联合文件系统
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:8.0
docker.io/library/mysql:8.0
​
#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
mysql        8.0       3218b38490ce   9 months ago   516MB

2.2 容器命令

docker run  镜像id/容器名称    #新建容器并启动
docker ps             #列出所有运行的容器
docker ps -a          #列出所有的容器,包括未运行的
docker rm  容器id      #删除指定容器
docker rm -f $(docker ps -aq)    #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器
docker start 容器id/容器名称       #启动容器
docker restart 容器id/容器名称     #重启容器
docker stop 容器id/容器名称        #停止当前正在运行的容器
docker kill 容器id/容器名称        #强制停止当前容器
docker exec -it 容器id/容器名称 /bin/bash   #进入当前正在运行的容器(注意:特殊的,当前使用exit退出容器不会停止容器)
exit        # 停止容器并退出(后台方式运行则仅退出)
Ctrl+P+Q     # 不停止容器退出

详解

docker run [可选参数] image
#参数说明
--name="Name" #容器名字 tomcat01 tomcat02 用来区分容器
-d           #后台方式运行
-it          #使用交互方式运行,进入容器查看内容(注意:使用这个参数表示还进入了容器中)
-p           #指定容器的端口
        -p ip:主机端口:容器端口
        -p 主机端口:容器端口(常用)
        -p 容器端口
-P(大写)      #随机指定端口

举例:

docker run 
-p 3306:3306 
--name test-mysql 
-v /mydata/test-mysql/log:/var/log/mysql 
-v /mydata/test-mysql/data:/var/lib/mysql 
-v /mydata/test-mysql/conf:/etc/mysql 
-e MYSQL_ROOT_PASSWORD=SZDXsht2015  
-d 
mysql:5.7
docker run 
--name nginx 
-d 
-p 7777:80 
nginx

2.3 总结

拉取(下载)镜像

docker pull 镜像名称[:version]

查看本地镜像:

docker images

新建容器并运行

docker run [可选参数] 镜像名称
​可选参数
 --name 容器别名     -->>      给容器起别名
 -d                -->>      后台方式运行
 -it               -->>      使用交互方式运行,进入容器查看内容
 -p 主机端口:容器端口 -->>      建立主机与容器端口映射
 -P(大写)         -->>      随机指定端口
 -v 主机目录:容器目录 -->>      实现容器挂载

进入容器(适用于运行的容器)

docker exec -it 容器别名(或容器id) /bin/bash

PS: 进入容器的方法有多种,但是常用的方法如上这种,此方法要求容器必须启动,否则不能进入容器中。

退出容器

exit

查看所有容器

docker ps			-->>	当前正在运行的所有容器
docker ps -a		-->>	所有容器
docker ps -l		-->>	查看最新创建的容器
docker ps --help	-->>	 查看docker ps的相关参数

 启动、重启、停止容器

docker start 容器id		-->>	启动容器
docker restart 容器id		-->>	重启容器
docker stop 容器id		-->>	停止当前正在运行的容器
docker kill 容器id		-->>	强制停止当前容器

删除容器

docker rm 容器id		-->>		删除指定的容器,不能删除正在运行的容器,如果要强制删除docker rm -rf 容器id
docker rm -f $(docker ps -aq)  #删除指定的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

2.4 容器挂载-容器卷技术

前言

我们进入容器之后,想对容器中某个配置文件进行修改,发现使用vim命令并不生效,提示:bash: vim: command not found。

这是因为docker容器中仅仅提供了最小的Linux系统内核。只有一些基本的指令,如果想要使用vim这些命令是需要单独下载安装的。

但是通常情况下,我们并不会选择在容器内部进行安装。而是通过挂载,将容器内的目录映射到我们Linux服务器中。

然后在Linux服务器对应的挂载路径中修改之后,就会自动映射到容器内部,实现动态修改。

这样做的好处很多:

一是减小容器的体积,

二是如果容器删除了,不至于数据丢失,实现容器的持久化和同步共享。

挂载方法

具体挂载方法前面提到过一种,就是在新建并运行容器的时候,添加参数 -v 主机目录:容器目录,此为指定路径挂载。

下面系统介绍常见的几种容器挂载方法:

docker run -d  --name nginx_01 -v  /etc/nginx  nginx   #匿名挂载
docker run -d  --name nginx_02 -v  nginx_my02:/etc/nginx  nginx  #具名挂载
docker run -d  --name nginx_03 -v  /home/nginx_my03/nginx:/etc/nginx  nginx #指定路径挂载
-v    容器内路径              #匿名挂载
-v    卷名:容器内路径         #具名挂载
-v    /宿主内路径:容器内路径   #指定路径挂载

示例

docker run -p 3306:3306 --name test-mysql \
-v /mydata/test-mysql/log:/var/log/mysql \
-v /mydata/test-mysql/data:/var/lib/mysql \
-v /mydata/test-mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
​
其它参数解释:
-e MYSQL_ROOT_PASSWORD=123456  -->>     初始化root用户的密码

查看挂载路径

之后如果我们想查看系统中某个容器它挂载了哪些路径,应该如何查看?

docker inspect 容器别名(或容器id)

注意

挂载的路径内外是共享的,如果原本容器的某个路径中包含其他内容,外部挂载是没有将内部文件复制出来的。

挂载最好是在创建容器的时候就进行。

思考:如果容器创建时没有挂载,如何给已有容器进行挂载呢?

三、Docker安装mysql容器

3.1 下载镜像文件

docker pull mysql:5.7

3.2 创建实例并启动

docker run -p 3306:3306 --name mysql5.7 \
-v /mydata/mysql5.7/log:/var/log/mysql \
-v /mydata/mysql5.7/data:/var/lib/mysql \
-v /mydata/mysql5.7/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql5.7/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql5.7/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql5.7/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码

3.3 MySQL 配置

vi /mydata/mysql5.7/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3.4 进入容器文件系统

docker exec -it mysql5.7 /bin/bash

我们也可以通过可视化工具连接当前mysql了。

如果是云服务器的话,需要开放对应的端口。

💡安装Mysql8.0版本遇到的问题:

Docker启动mysql8.0版本自动退出?

答案:[转]Docker启动mysql8.0版本自动退出,Supplied value : /var/lib/mysql-files(转载请删除括号里的内容)_docker启动mysql自动退出_树根朽木的博客-CSDN博客

云服务器通过docker镜像安装的mysql8.0容器不能远程连接?

mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。

答案:Docker安装Mysql 8.0_docker安装mysql8.0_Cherry_King的博客-CSDN博客

mysql5.7无需设置即可远程访问,是因为在mysql数据库中已经配置好了规则。而8.0版本需要我们手动更改规则,更改方法见上面链接。

 

安装mysql8.0无法启动,还有可能是没有完全挂载上,可以使用如下命令新建容器并运行

docker run -p 3309:3306 --name test-mysql8.0 \
-v /mydata/test-mysql8.0/log:/var/log/mysql \
-v /mydata/test-mysql8.0/data:/var/lib/mysql \
-v /mydata/test-mysql8.0/conf:/etc/mysql \
-v /mydata/test-mysql8.0/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0

四、Docker安装Redis

如下步骤依次执行:

docker pull redis
docker images

新建容器并运行

需要提前新建

如果不提前创建文件名称的话,一会在挂载的时候它可能误认为是文件夹

mkdir -p /mydata/myredis/conf

touch /mydata/myredis/conf/redis.conf

新建容器并运行

docker run -p 6379:6379 --name myredis -v /mydata/myredis/data:/data \ 
-v /mydata/myredis/conf/redis.conf:/etc/redis/redis.conf \ 
-d redis redis-server

使用docker安装的redis默认是没有配置文件的。因此需要去官网下载相同版本的redis,然后把redis.conf配置文件复制到目录中,修改相关配置。

如果你的redis是安装在云服务器上的,那么是一定要配置文件的。

需要在配置文件中设置redis的密码,否则当我们将云服务器的redis对应端口号开放以后,又没有密码,那么意味着任何人都能直接进入我们的redis中。安全问题直接拉满!

配置完成密码以后,需要重启redis才能生效。docker restart myredis

以后,当我们建立客户端链接的时候,就需要密码才可以。auth redis密码

[root@VM-16-11-centos conf]# docker exec -it myredis redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth abc123
OK

配置密码的方式也很简单:参考:redis如何设置密码_redis2.4.6.0 加密码_普通网友的博客-CSDN博客

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

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

相关文章

SSM框架原理畅谈之SpringMVC

SpringMVC 一、Java SE Servlet标准1.1 Servlet 接口1.2 HttpServletRequest 接口1.3 HttpServletResponse 接口1.4 Cookie 对象1.5 Filter 接口1.6 HttpSession 接口 二、SpringMVC2.1 Spring MVC核心概念2.2 DispatcherServlet2.3 DispatcherServlet.init()2.4 DispatcherSer…

第三章 搜索与图论(一)——深搜,广搜,图的存储与拓扑序列

文章目录 深度优先搜索广度优先搜索树和图的存储图的深搜 拓扑序深搜练习题842. 排列数字843. n-皇后问题 广搜练习题844. 走迷宫845. 八数码 树和图的存储与遍历练习题846. 树的重心847. 图中点的层次 拓扑序练习题848. 有向图的拓扑序列 深度优先搜索 数据结构&#xff1a; …

常见排序算法详解

文章目录 前言1. 排序算法简介2 算法效率2.1 度量一个程序执行时间两种方法2.2 时间频度2.3 时间复杂度2.4 常见的时间复杂度2.5 平均和最坏时间复杂度 3. 常见排序算法详解3.1 基数排序 (Radix Sort)(1) 算法过程(2)代码实现 3.2 冒泡排序 (Bubble Sort)(1) 算法过程(2) 代码实…

2023年7月2日leetcode每日一题打卡——125.验证回文串

一、题目描述与要求 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 题目描述 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给…

学习系统编程No.28【多线程概念实战】

引言&#xff1a; 北京时间&#xff1a;2023/6/29/15:33&#xff0c;刚刚更新完博客&#xff0c;目前没什么状态&#xff0c;不好趁热打铁&#xff0c;需要去睡一会会&#xff0c;昨天睡的有点迟&#xff0c;然后忘记把7点到8点30之间的4个闹钟关掉了&#xff0c;恶心了我自己…

C语言学习(三十)---枚举、位段、联合体

这几天在往实习的地方弄东西&#xff0c;比较累&#xff0c;因此没有更新&#xff0c;在几天前我们学习了内存操作函数&#xff0c;其与之前学习的字符串操作函数相比&#xff0c;适用范围更加广泛&#xff0c;大家要注意掌握学习&#xff0c;今天我们将学习枚举、位段和联合体…

闲置BROOKSTONE Rover间谍车重生记

22年春节在家&#xff0c;哪也去不了&#xff0c;收拾出来一个多年前的玩具&#xff0c;全名叫BROOKSTONE Rover revolution&#xff0c;长这个样子。 尽管是7年前的产品了&#xff0c;科技感依旧挺足 印象中能手机控制&#xff0c;并且能语音对讲。只是网上找到的安卓版应用已…

xenomai内核解析--xenomai实时线程创建流程

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经同意&#xff0c;禁止转载。如有错误&#xff0c;欢迎指正&#xff0c;博客地址&#xff1a;https://blog.csdn.net/qq_22654551?typeblog 文章目录 问题概述1 libCobalt中调用非实时POSIX接口2 阶段1 linux线程…

02_jQuery与Ajax

jquery jquery的作用 他是js的库 处理html,事件,实现动画效果,方便的为网站提供AJAX交互 命名格式 .ji:体积大,用于学习和debug使用 .min.js:压缩的文件,体积小,用于线上环境使用 使用方法 必须先在页面文件中进行引用 $就是jQuery 注意: jQuery是DOM的封装 jQuery和…

Spring Boot 中的服务网关是什么,原理,如何使用

Spring Boot 中的服务网关是什么&#xff0c;原理&#xff0c;如何使用 在微服务架构中&#xff0c;服务网关是一个非常重要的组件。它可以作为所有微服务的入口&#xff0c;负责路由、负载均衡、安全性和监控等方面的功能。Spring Boot 提供了一系列的服务网关工具&#xff0…

redis-哨兵安装

解决问题 自动故障修复 1.在主从模式的基础上,在主节点添加自己的认证密码即可 2.将代码客户端地址改为哨兵地址 ------------- 主节点配置 daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.r…

Java POI (4)—— Linux环境下文件解析过程出现OOM的问题

Excel文件在进行解析的时候&#xff0c;在Windows环境中&#xff0c;没用报错&#xff0c;但是在Linux环境中&#xff0c;出现了如下的报错&#xff1a; nested exception is javalang.OutofMemoryError: Java heap space &#xff08;OOM&#xff09; 一、内存溢出和栈溢出有什…

主流特征工程平台(一)

一. 目标 对于Feature Store的能力与边界&#xff0c;每家的定义略微不同&#xff0c;《Feature Stores - A Hierarchy of Needs》&#xff09;这篇文章做了很好的总结&#xff0c;大体分为如下几个层次&#xff1a; 特征管理&#xff1a;特征抽取、处理、存储、元数据管理&am…

群晖NAS 安装 MySQL 远程访问连接

目录 1. 安装Mysql 2. 安装phpMyAdmin 3. 修改User 表 4. 本地测试连接 5. 安装cpolar 6. 配置公网访问地址 7. 固定连接公网地址 [TOC] > **转载自cpolar极点云文章&#xff1a;[群晖NAS 安装 MySQL远程访问连接](https://www.cpolar.com/blog/install-mysql-remote-…

Spring 事务使用详解

前言 什么是事务&#xff1f;根据 维基百科事务 介绍&#xff0c;数据库事务&#xff08;简称&#xff1a;事务&#xff09;是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。简单来说&#xff0c;事务就是将一系列操作当成一个不可拆分…

报喜鸟如何触发数字化转型及品牌扩张战略分析

传统服装企业往往面临缺乏创新、盲目扩张、追求低成本、库存和行业周期性等问题。报喜鸟通过深入分析市场需求&#xff0c;明确聚焦主业&#xff0c;提出加强品牌核心竞争力的价值主张。通过实施DTC转型&#xff0c;发力电商平台和线下门店等举措&#xff0c;报喜鸟成功提高品牌…

VSC++=》 指针实数排序

缘由https://bbs.csdn.net/topics/396523482 void 指针实数排序(double* aa, int d) {//缘由https://bbs.csdn.net/topics/396523482double lin 0; int j d, jj 0;while (jj < d) if (--j > jj) if (aa[j] > aa[j - 1])lin aa[j], aa[j] aa[j - 1], aa[j - 1] …

Flask request和requests(客户端服务器)

Flask request和requests 1、Flask request属性2、requests属性3、实现代码 1、Flask request属性 这么多属性什么时候有值什么时候没值&#xff0c;其实完全取决于我们请求头content-type是什么&#xff0c;如果是以表单形式multipart/form-data、application/x-www-form-url…

辅助驾驶功能开发-功能规范篇(21)-3-XP行泊一体方案功能规范

XPilot Parking 自动泊车系统 七、全自动泊车(AutoParking) • 自动泊车辅助(AutoParking Assist)、斜列式车位泊车辅助(Diagonal AutoParking Assist) - 产品定义 基于超声波传感器和环视摄像头对空间和车位的识别,通过自动泊车系统实现全自动泊车入库。 - 功能说…

使用HHDESK图形化功能管理服务器

服务器的管理通常繁琐而枯燥&#xff0c;需要大量的命令行来执行。 所以图形化功能应运而生。 本篇以传输文件为例&#xff0c;简单介绍一下HHDESK的图形化管理功能。 首先需要配置好服务器。 点击连接管理&#xff0c;在连接类型中选择SSH&#xff0c;按照刚才在服务器中配…