自学内容网 自学内容网

ubuntu 22.04 安装 docker 阿里云源 LTS

ubuntu 22.04 安装 docker 阿里云源 LTS

参考
ubuntu 22.04 安装 docker(服务器从毛胚到精装)
https://www.cnblogs.com/xxctx/p/18354718

Docker安装最新版MySQL5.7(mysql-5.7.40)教程(参考Docker Hub) 备份
https://blog.csdn.net/u014282578/article/details/128262172

安装docker
在 Ubuntu 22.04 上安装 Docker 可以按照以下步骤进行:

  1. 更新软件包索引
    首先,更新现有的软件包索引:
    sudo apt update

  2. 安装依赖包
    安装必要的依赖包:
    sudo apt install apt-transport-https ca-certificates curl software-properties-common

  3. 添加 Docker 的官方 GPG 密钥
    添加 Docker 的官方 GPG 密钥以验证下载的软件包:
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  4. 添加 Docker 的 APT 仓库
    添加 Docker 的 APT 仓库到你的系统源列表中:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 更新软件包索引
    再次更新软件包索引以包含 Docker APT 仓库:
    sudo apt update

  2. 安装 Docker
    安装 Docker CE(社区版):

sudo apt install docker-ce docker-ce-cli containerd.io
 
# 查看是否安装成功
docker --version

  1. 启动并启用 Docker
    安装完成后,启动 Docker 服务并设置为开机自启动:
    sudo systemctl start docker
    sudo systemctl enable docker

  2. 验证安装
    通过运行 hello-world 镜像来验证 Docker 是否正确安装
    sudo docker run hello-world

出现问题

jack@ubuntu2204:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

  1. 将当前用户添加到 Docker 用户组
    很多 Docker 命令都需要使用 sudo,将当前用户添加到 docker 组,就可以不使用 sudo :
    sudo usermod -aG docker $USER

加速地址

我们通过docker官方的默认地址下载镜像时,由于 gwf 的原因,可能会出现无法访问的情况。
目前可用的国内docker hub 镜像,https://docker.m.daocloud.io。
sudo vi /etc/docker/daemon.json

{
"registry-mirrors": [ "https://docker.m.daocloud.io" ]
}

sudo systemctl restart docker

docker.service: Failed with result ‘exit-code’
https://blog.csdn.net/hanjun0612/article/details/118543759

查看日志:

$ sudo dockerd --debug
看到是我们的daemon.json文件有问题
重启

sudo service docker restart

sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

11

通常在项目研发阶段为了开发测试方便此处mysql安装在docker下(便于移至和扩展比较灵活),必须要注意在生产环境中不推荐直接安装在docker下
  MySQL官方安装包下载地址:
  https://dev.mysql.com/downloads/mysql/

Docker Hub官方网址:
  https://hub.docker.com/

打开官网地址:https://hub.docker.com/(需要挂vpn科学上网)

sudo docker pull mysql:5.7.40
拉取镜像

5.7.40: Pulling from library/mysql
d26998a7c52d: Pull complete 
4a9d8a3567e3: Pull complete 
bfee1f0f349e: Pull complete 
71ff8dfb9b12: Pull complete 
bf56cbebc916: Pull complete 
2e747e5e37d7: Pull complete 
711a06e512da: Pull complete 
3288d68e4e9e: Pull complete 
49271f2d6d15: Pull complete 
f782f6cac69c: Pull complete 
701dea355691: Pull complete 
Digest: sha256:6306f106a056e24b3a2582a59a4c84cd199907f826eff27df36406f227cd9a7d
Status: Downloaded newer image for mysql:5.7.40
docker.io/library/mysql:5.7.40

sudo docker images
查看当前已有镜像

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   18 months ago   13.3kB
mysql         5.7.40    d410f4167eea   23 months ago   495MB

sudo mkdir /home/docker_mysql_5_7_40
sudo mkdir -p /home/docker_mysql_5_7_40/log
sudo mkdir -p /home/docker_mysql_5_7_40/data
sudo mkdir -p /home/docker_mysql_5_7_40/conf
sudo mkdir -p /home/docker_mysql_5_7_40/mysql-files

在/home/docker_mysql_5_7_40/conf 目录下创建自定义的 custom.cnf 配置文件。文件名随意,文件格式必须为 .cnf 。
 Docker Hub中的MySQL教程文档有说到,在 /etc/mysql/conf.d/ 目录下新建自定义的配置文件 xxx.cnf也会被读取到,而且还是优先读取的。
添加容器运行的配置参数。使用的是 utf8mb4 编码而不是 utf8 编码。
sudo vi /home/docker_mysql_5_7_40/conf/custom.cnf

[client]
[mysql]
[mysqld]
skip-name-resolve
bind-address    = 0.0.0.0
max_connections=500
max_allowed_packet=500M
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
innodb_buffer_pool_size = 680M
join_buffer_size = 32M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
key_buffer_size=64M
server_id = 0005
log-bin = mysql-bin
slave-skip-errors=all

111

sudo docker run -p 6309:3306 --name abcmysql \
-v /home/docker_mysql_5_7_40/log:/var/log/mysql \
-v /home/docker_mysql_5_7_40/data:/var/lib/mysql \
-v /home/docker_mysql_5_7_40/conf:/etc/mysql/conf.d  \
-v /home/docker_mysql_5_7_40/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.40 

aa

\ 后面不要有空格 等字符

启动mysql容器

docker run [启动参数] IMAGE [镜像启动的运行命令(一般不写)]

docker run: 运行一个容器,每个容器相互隔离,他都是独立的运行环境,是一个完整的实例。

-p 3306:3306:把mysql容器自己的端口映射到虚拟主机,这样我们才能访问,这是端口映射。(左侧是本地端口:右侧是docker容器里的端口)

–name mysql:为容器取名,这个名字随意。

-v:文件路径的挂载。(数据库文件,日志,配置文件)

-e MYSQL_ROOT_PASSWORD:添加环境参数,比如密码。

d mysql:5.7.40:在后端运行,指定使用的是哪个镜像。

通过命令进入mysql docker exec -it mysql bash,进入mysql命令模式后输入ls /查看目录

参考

[client]
port=3306
default_character_set=utf8mb4

[mysql]
default_character_set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake


kip-name-resovle: mysql连接慢,不把ip地址解析为域名,无用,有问题
skip-character-set-client-handshake: 忽略客户端的字符集,使用服务器的设置

mysql -h 127.0.0.1 -u root -P 6309 -p

查看字符集

show variables like '%character%'; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

都是默认的吧

创建 数据库

创建MySQL数据库的命令通常使用CREATE DATABASE语句。以下是一个示例代码:

CREATE DATABASE my_database;
在执行这条命令之前,确保你已经连接到了MySQL服务器,并且拥有创建新数据库的权限。如果数据库创建成功,你会看到类似以下的确认信息:

Query OK, 1 row affected (0.00 sec)
如果你想指定字符集和校对规则,可以使用以下语句:

CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这将创建一个使用utf8mb4字符集和utf8mb4_unicode_ci校对规则的数据库。请根据你的需求调整字符集和校对规则。

mysql 小例子

https://blog.csdn.net/wowocpp/article/details/139501625
drop database company
show databases ;
use test_company
select * from test ;

show databases ;
create database test_company ;
use test_company ;

drop table if exists test;
create table test (
  id int unsigned primary key auto_increment comment 'id'
  , name varchar(50) not null comment '名称'
  , create_time datetime not null default current_timestamp comment '创建时间'
  , update_time datetime not null default current_timestamp on update current_timestamp comment '更新时间'
) charset=utf8 comment '测试表';

insert into test(name) values ('张三'), ('李四');
select * from test;

测试了一下速度 docker 和 非 docker mysql ,同一个机器上面 ,速度相差不大
下面的log 显示 建表的时候,时间是 1.06秒

mysql> 
mysql> create database test_company ;
Query OK, 1 row affected (0.14 sec)

mysql> use test_company ;
Database changed
mysql> drop table if exists test;
Query OK, 0 rows affected, 1 warning (0.09 sec)

mysql> create table test (
    ->   id int unsigned primary key auto_increment comment 'id'
    ->   , name varchar(50) not null comment '名称'
    ->   , create_time datetime not null default current_timestamp comment '创建时间'
    ->   , update_time datetime not null default current_timestamp on update current_timestamp comment '更新时间'
    -> ) charset=utf8 comment '测试表';
Query OK, 0 rows affected (1.06 sec)

mysql> insert into test(name) values ('张三'), ('李四');
Query OK, 2 rows affected (0.49 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>  select * from test;
+----+--------+---------------------+---------------------+
| id | name   | create_time         | update_time         |
+----+--------+---------------------+---------------------+
|  1 | 张三   | 2024-11-15 15:48:40 | 2024-11-15 15:48:40 |
|  2 | 李四   | 2024-11-15 15:48:40 | 2024-11-15 15:48:40 |
+----+--------+---------------------+---------------------+
2 rows in set (0.00 sec)

mysql> 

https://blog.csdn.net/m0_49929446/article/details/141441028
Docker设置容器开机自启动的方法主要有以下几种:

使用–restart参数
在启动容器时,可以通过docker run命令的–restart参数来指定容器的重启策略,从而实现容器的开机自启动。–restart参数可以接受以下几个值:
no:不自动重启容器(默认值)。
always:容器退出时总是重启。
on-failure[:max-retries]:容器以非零状态码退出时重启,可以指定最大重试次数(如果不指定,则无限重试)。
unless-stopped:无论退出状态如何,总是重启容器,但当容器被手动停止时不重启。
例如,使用以下命令启动一个总是自动重启的Nginx容器:
bash
docker run -d --restart always nginx
如果容器已经运行,但之前没有设置自动重启,可以使用docker update命令来更新重启策略:
bash
docker update --restart=always 容器ID或名称

socket

mysql> show variables like ‘socket’;
±--------------±----------------------------+
| Variable_name | Value |
±--------------±----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
±--------------±----------------------------+
1 row in set (0.06 sec)


原文地址:https://blog.csdn.net/wowocpp/article/details/143786365

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!