​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer

news2024/12/22 15:24:54

​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer

这篇文章探讨了在Linux Ubuntu环境下安装和配置Docker及其相关工具的过程。首先介绍了Docker的基本概念,然后详细讲解了在Ubuntu系统上的安装步骤。随后,文章涵盖了Docker Compose的配置,使读者能够更高效地管理多个Docker容器。此外,文章还包括了在Docker环境中部署和配置MySQL数据库的方法,以满足各种应用的数据存储需求。最后,文章介绍了中文版Portainer的安装和配置,为用户提供了一个友好的图形化界面,使Docker容器的管理变得更加直观和便捷。通过这些内容,读者将能够迅速在Ubuntu系统上搭建强大的Docker环境,同时利用相关工具更方便地进行容器化应用的开发和部署。

首先环境准备:

下载Ubuntu20.04.4版本并打开vmare16虚拟机(我用的这个版本)

iso镜像名称:ubuntu-20.04.4-desktop-amd64.iso

其它版本的ubuntu可以去官网自行下载:

https://ubuntu.com/

为了避免出现其它环境问题先卸载旧版本(纯净镜像可以忽略此步骤):

 sudo apt-get remove docker docker-engine docker.io containerd runc
 rm -rf /var/lib/docker
 rm -rf /var/lib/containerd

安装docker

sudo apt-get update
sudo apt install apt-transport-https ca-certificates curl software-properties-common

或者按照官方的命令:

sudo apt-get install ca-certificates curl gnupg lsb-release

添加Docker’s official GPG key

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

设置仓库

 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

设置国内镜像仓库

vim /etc/docker/daemon.json

添加以下内容

{
  "registry-mirrors": ["https://kuamavit.mirror.aliyuncs.com",
  "https://registry.docker-cn.com", 
  "https://docker.mirrors.ustc.edu.cn"],
  "max-concurrent-downloads": 10,
  "storage-driver": "overlay2",
  "graph": "/data/docker",
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    }
}

查看是否更改为国内的镜像仓库:

docker info

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,

并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。

sudo groupadd docker   

  #添加docker用户组

sudo gpasswd -a $USER docker  

   #将登陆用户加入到docker用户组中

newgrp docker

    #更新用户组

就没有了error报错:

由于容器的环境比较精简不能编辑,我们可从本机编辑文件复制到容器

   

docker cp /root/index.html tomcat-8080:/usr/local/tomcat/webapps/

运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动

例子

docker run -d -p 6379:6379 --name redis506 --restart=always  -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf  redis:5.0.5 --requirepass "password"

设置随服务启动而自启动 systemctl enable docker

安装 Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#可以自己选定版本号安装我选的是v2.12.2

sudo ln -s ~/.docker/cli-plugins/docker-compose /usr/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose  

 //设置权限

最底下显示镜像地址就是生效

查看docker compose

运行 Docker Compose

下载tomcat的镜像

docker pull tomcat

docker images #显示所有镜像

创建tomcat容器

docker run -d --name tomcat-8080 -p 8080:8080 tomcat
docker run -d --name tomcat-8081 -p 8081:8080 tomcat

进入容器配置服务

docker exec -it tomcat-8080 bash

#为了镜像的简洁性,tomcat删除了非必要的文件

进入webapps下

mkdir ROOT
echo '<h1>8080!!!</h1>'>>index.html 
echo '<h1>8081!!!</h1>'>>index.html

#由于最小化没有vi命令,使用打印命令写入文件。

防火墙放行

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent

配置docker数据卷

数据卷:是一个可供一个或多个容器使用的特殊目录。

1、docker run -v 本机存放路径:容器内的存放路径 -d --name -p *:* 镜像

例子:

docker run -d -p 8080:8080 --name Tomcat-8080 -v /root/docker-vloumn/qfnj:/usr/local/tomcat/webapps/qfnj tomcat

Docker安装nginx

nginx目录

/usr/sbin/nginx

/usr/lib/nginx

/etc/nginx      nginx的配置文件

/usr/share/nginx     nginx静态html5文件

nginx容器创建,并创建对应的映射关系

docker run -d -p 80:80 --name nginx-damoe -v /usr/local/nginx/html:/usr/local/nginx/html -v /user/local/nginx/conf/nginx.conf:/etc/nginx/conf.d/deafault.conf -v /usr/local/nginx/logs:/var/log/nginx nginx

docker中安装Mysql

docker pull mysql:8.0.27

docker run -d --name Mysql-3306 -p 3306-3306 -e MYSQL_ROOT_PASSWORD='123456' mysql:8.0.27

-p 13306:3306                      将容器的 3306 端口映射到主机的 3306 端口

--name  Mysql-3306                    启动后容器名

-e MYSQL_ROOT_PASSWORD='123456'   初始化 root 用户的密码

docker中部署Mysql

 docker pull mysql:8.0.27

创建容器并运行:

docker run -d --name Mysql-3306 -p 3306-3306 -e MYSQL_ROOT_PASSWORD='123456' mysql:8.0.27

-p 3306:3306                      将容器的 3306 端口映射到主机的 3306 端口

--name  Mysql-3306                    启动后的容器名

-e MYSQL_ROOT_PASSWORD='123456'   初始化 root 用户的密码

Docker中运行mysql,避免中文输入问题:

docker exec -it Mysql-3306 env LANG=C.UTF-8 bash
mysql  -uroot -p

输入密码:123456进入mysql

展示数据库:

show databases;

使用mysql数据库:

use mysql;

查看用户信息:

SELECT `Host`,`User` FROM user;

MySQL默认只允许root账户在本地登录,如果要在其他机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的账户

因为拉取的mysql镜像是比较新版本的,当使用grant权限列表on数据库to '用户名'@'访问主机" identified by '密码';时会出现.……ear 'identified by '密码" at line1"这个错误

因为新版的的mysql版本已经将创建账户和赋予权限的方式分开了。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION ;
flush privileges;

创建myx数据库并使用

#下面是我自己的一些设计表和建表,可忽略。

构建表结构并插入数据:

teacher表结构

字段名

字段描述

数据类型

主键

外键

非空

唯一

自增

id

编号

INT(4)

num

教工号

INT(10)

name

姓名

VARCHAR(20)

sex

性别

VARCHAR(4)

birthday

出生日期

DATETIME

address

家庭住址

VARCHAR(50)

(1)teacher表的创建:

create table teacher(

id int(4) not null unique auto_increment,

num int(10) not null unique,

name varchar(20) not null,

sex varchar(4) not null,

birthday datetime,

address  varchar(50),

primary key(id)

)engine = InnoDB default charset = utf8 collate = utf8_bin;

然后向teacher表中插入记录。

insert into teacher values(1, 1001, '张三', '男', '1984-11-08', '北京市昌平区'),(2, 1002, '李四', '女', '1970-01-21', '北京市海淀区'),(3, 1003, '王五', '男', '1976-10-30', '北京市昌平区'),(4, 1004, '赵六', '男', '1980-06-05', '北京市顺义区');

查询teacher表数据:

防火墙放行3306

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload 

dockerfile配置demo1

1、创建存放Dockerfile文件的文件夹

mkdir -p /usr/local/docker/demo1/

2、编写Dockerfile文件 (注:Dockerfile文件是严格区分大小写的)

FROM tomcat 

#借助tomcat的镜像

RUN mkdir -p /usr/local/tomcat/webapps/ROOT/ 

#创建ROOT目录

RUN echo  "Good morning, and in case I don't see you, Good afternoon, Good evening, And good night.">/usr/local/tomcat/webapps/ROOT/index.html

#使用 echo 写入创建内容

WORKDIR /usr/local/tomcat 

#跳转到/usr/local/tomcat目录

3、构建Dockerfile镜像 -t 指定构建镜像名称

docker build -t demo1 .或绝对路径

4、创建容器,测试镜像

docker run -d --name demo1-8080 -p 8080:8080 demo1

Dockerfile案例七、配置demo1:2.0

1、创建demo2文件夹

mkdir -p /usr/local/docker/demo1:2.0/

2、编写demo2的Dockerfile文件

FROM tomcat

WORKDIR /usr/local/tomcat/webapps/ROOT/

RUN rm -rf *

RUN echo "<h1>Hello world</h1>">/usr/local/tomcat/webapps/ROOT/index.html

3、创建镜像

docker build -t demo2 /usr/local/docker/demo1:2.0/

4、创建容器,测试镜像

docker run -d --name demo1-8080 -p 8080:8080 demo1:2.0
  1. 测试

Dockerfile配置demo2 (学习COPY命令)

1、创建demo2文件夹

mkdir -p /usr/local/docker/demo2/

2、编写Dockerfile文件

FROM tomcat

WORKDIR /usr/local/tomcat/webapps

RUN mkdir ROOT

RUN rm -rf *

COPY 1.jpg /usr/local/tomcat/webapps/ROOT/

3、创建镜像

docker build -t demo2 .

4、创建容器,测试镜像

Dockerfile案例九

1、创建demo3文件夹

mkdir -p /usr/local/docker/demo3/

2、编写demo3的Dockerfile文件

FROM tomcat

RUN mkdir -p /usr/local/tomcat/webapps/ROOT

WORKDIR /usr/local/tomcat/webapps/ROOT

RUN rm -rf *

COPY qfnj.zip /usr/local/tomcat/webapps/ROOT/

RUN unzip qfnj.zip

RUN rm -rf qfnj.zip

WORKDIR /usr/local/tomcat

3、创建镜像

docker build -t demo3 .

4、创建容器,测试镜像

Dockerfile案例十、配置图形化

1、下载docker的中文图形化镜像

sudo su

cp  Portainer-CN.zip  /root

Portainer-CN中文界面包上传到root目录下下

sudo mkdir -p /root/portainer/{data,public}

在命令行root目录下输入下面代码

apt install unzip
unzip Portainer-CN.zip -d /root/portainer/public
docker run -d \

--net bridge \

-p 9000:9000 \

--restart=always \

-v /var/run/docker.sock:/var/run/docker.sock \

-v /root/portainer/data:/data \

-v /root/portainer/public:/public \

--name myportainer \

portainer/portainer

ip;9000  设置管理员密码,密码长度不少于八个字符设置好后网页右上角注销重新登录选择本地docker

OK,到此一些docker和docker-compose的部署和一些简单案例结束了,后面我还会继续更新相关大数据方面的内容。                                

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

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

相关文章

【JUC】二十八、synchronized锁升级之偏向锁

文章目录 1、偏向锁出现的背景2、从共享对象的内存结构看偏向锁3、偏向锁的持有4、启动偏向锁5、sleep暂停来启动偏向锁6、偏向锁的撤销7、总体流程8、SinceJava15 偏向锁的废除 1、偏向锁出现的背景 如果一个线程连续几次抢到锁&#xff0c;仍然重复加锁解锁&#xff0c;就会…

如何使用 Redis 快速实现分布式锁?

本文我们来讨论如何使用 Redis 快速实现分布式锁。 分布式锁有很多种解决方案&#xff0c;前面简单介绍过&#xff0c;Redis 可以通过 set key 方式来实现分布式锁&#xff0c;但实际情况要更加复杂&#xff0c;比如如何确保临界资源的串行执行&#xff0c;如何及时释放&#…

HarmonyOS、ArkTS 备忘录(持续更新中)

Component 、Builder Component封装大的组件Builder自定义构建函数&#xff0c;可以理解为 构建页面的函数&#xff1b;Builder插槽多点&#xff0c;封装一些小的模块 组件状态管理 像素单位 export default 和 export之间的区别

鸿蒙ArkTS Web组件加载空白的问题原因及解决方案

问题症状 初学鸿蒙开发&#xff0c;按照官方文档Web组件文档《使用Web组件加载页面》示例中的代码照抄运行后显示空白&#xff0c;纠结之余多方搜索后扔无解决方法。 运行代码 import web_webview from ohos.web.webviewEntry Component struct Index {controller: web_webv…

企业计算机服务器中了halo勒索病毒怎么解密,勒索病毒解密数据恢复

在网络技术飞速发展的今天&#xff0c;越来越多的企业开始意识到企业数据安全的重要性&#xff0c;很多企业都会依赖数字化办公系统软件&#xff0c;并且通过系统软件将企业的重要数据存储在数据库中&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但网络威胁一直存在…

关于在Java中打印三角形图形的汇总

前面写过一些关于打印三角形图形代码的文章&#xff0c;这里进行了汇总&#xff0c;话不多说&#xff0c;直接上代码&#xff1a; /*** 关于打印三角形的汇总*/ public class Work1 {public static void main(String[] args) {int num 5;/** 打印如下图形&#xff1a;* ** …

基于单片机智能循迹小车仿真设计

**单片机设计介绍&#xff0c;基于单片机智能循迹小车仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能循迹小车是一种通过传感器检测地面情况&#xff0c;并根据设定的规则进行动作控制的机器人。它使用…

如何正确使用缓存来提升系统性能

文章目录 引言什么时候适合加缓存&#xff1f;示例1示例2&#xff1a;示例3&#xff1a; 缓存应该怎么配置&#xff1f;数据分布**缓存容量大小&#xff1a;**数据淘汰策略 缓存的副作用总结 引言 在上一篇文章IO密集型服务提升性能的三种方法中&#xff0c;我们提到了三种优化…

LeetCode Hot100 39.组合总数

题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…

css3实现动态心电图折线

css3实现动态心电图折线 M&#xff08;moveto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff0c;移动到的点的x轴和y轴的坐标L&#xff08;lineto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff09;&#xff0c;它会在当前位置…

04.HTML其他知识

HTML其他知识 1.HTML实体 介绍 在 HTML 中我们可以用一种特殊的形式的内容&#xff0c;来表示某个符号&#xff0c;这种特殊形式的内容&#xff0c;就是 HTML 实体。比如小于号 < 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符&#xff0c;我们必须在…

CGAL的3D网格生成

1、介绍 该软件包致力于生成离散三维域的各向同性简化网格。要网格化的域是三维空间的子集&#xff0c;需要有界。域可以连接或由多个组件组成和/或细分为几个子域。 边界曲面和细分曲面是平滑曲面或分段平滑曲面&#xff0c;由平面或曲面面片形成。表面可能表现出一维特征&…

成都工业学院2021级操作系统专周课程设计FCFS,SSTF,SCAN,LOOK算法的实现

运行环境 操作系统&#xff1a;Windows 11 家庭版 运行软件&#xff1a;CLion 2023.2.2 源代码文件 #include <iostream> #include <vector> #include <algorithm> #include <random> using namespace std;// 生成随机数 int generateRandomNumber…

12.13_黑马数据结构与算法笔记Java

目录 098 堆 heapify 3 099 堆 增删替换 100 堆 e01 堆排序 100 堆e02 求数组第k大元素 100 堆e03 求数据流第k大元素 100 堆e04 求数据流中位数1 100 堆e04 求数据流中位数2 100 堆e04 求数据流中位数3 101 二叉树 概述 102 二叉树 深度优先遍历 103 二叉树 前中后…

2024年顶级的9个 Android 数据恢复工具(免费和付费)

不同的事情可能会损坏您的Android手机并导致您丢失数据。但大多数时候&#xff0c;您可以使用取证工具恢复部分或全部文件。 问题可能来自手机的物理损坏、磁盘的逻辑故障、完整的系统擦除&#xff0c;或者只是简单的粗心大意。 但是&#xff0c;无论数据丢失的原因是什么&am…

路由基本原理

目录 一、路由器概述 二、路由器的工作原理 三、路由表的形成 四、路由配置 1.连接设备 2.进入系统模式 3.进入接口模式 4.配置网络 5.下一跳的设置 6.设置浮动路由 7.设置默认路由 一、路由器概述 路由器&#xff08;Router&#xff09;是一种用于连接不同网络或子…

MySQL和Redis有什么区别?

目录 一、什么是MySQL 二、什么是Redis 三、MySQL和Redis的区别 一、什么是MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是最流行的数据库之一。MySQL以其高性能、可靠性和易用性而闻名&#xff0c;广泛应用于各种Web应用程序…

单片机的低功耗模式介绍

文章目录 简介一、功耗来源说明1.1、芯片工作模式1.2、静态损耗1.3、I/O额外损耗1.4、动态损耗 二、功耗如何测量三、降低功耗有什么方法3.1、选取合适的芯片工作模式3.2、降低工作频率3.3、关闭不需要使用的外设3.4、 降低静态电流损耗3.5、 周期采集供电3.6、 设置IO口状态 四…

MYSQL各种日志

感谢B站up主的视频分享 黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括_哔哩哔哩_bilibili

FMETP STREAM 2.0

FMETPSTREAM简化了Unity3D中的直播,无需编码。设置和测试仅需5分钟。 "编码器模块"将Unity游戏视图、网络摄像头、桌面、声音和麦克风输入转换为字节数据,使其完美适用于各种流媒体场景。 优化的网络模块支持Server-clients连接类型,并允许您使用单个命令向 Serve…