Debian使用Docker安装redis和mysql

Docker是一个简化容器中应用程序进程管理过程的应用程序。容器允许您在资源隔离的进程中运行应用程序。它们与虚拟机类似,但容器更便携,更加资源友好,并且更依赖于主机操作系统。

这一次,我们将在Debian 9上安装和使用Docker CE。您将安装Docker本身,并使用容器和映像。

Docker

安装

官方Debian存储库中提供的Docker安装包可能不是最新版本。为了确保我们获得最新版本,我们将从官方Docker存储库安装Docker。为此,我们将添加一个新的包源,从Docker添加GPG密钥以确保下载有效,然后安装该包。

首先,更新现有的包列表:

1
sudo apt update

接下来,安装一些允许apt使用包通过HTTPS的必备软件包:

1
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

然后将官方Docker存储库的GPG密钥添加到您的系统:

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

将Docker存储库添加到APT源:

1
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

接下来,使用新添加的repo中的Docker包更新包数据库:

1
sudo apt update

确保您要从Docker repo而不是默认的Debian repo安装:

1
apt-cache policy docker-ce

虽然Docker的版本号可能不同,但您会看到这样的输出:

1
2
3
4
5
6
docker-ce:
Installed: (none)
Candidate: 18.06.1~ce~3-0~debian
Version table:
18.06.1~ce~3-0~debian 500
500 https://download.docker.com/linux/debian stretch/stable amd64 Packages

请注意,docker-ce未安装,但安装的候选者来自Debian 9(stretch)的Docker存储库。

最后,安装Docker:

1
sudo apt install docker-ce

现在应该安装Docker,守护进程启动,并启用进程启动进程。检查它是否正在运行:

1
sudo systemctl status docker

输出应类似于以下内容,表明该服务处于活动状态并正在运行:

1
2
3
4
5
6
7
8
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
Docs: https://docs.docker.com
Main PID: 21319 (dockerd)
CGroup: /system.slice/docker.service
├─21319 /usr/bin/dockerd -H fd://
└─21326 docker-containerd --config /var/run/docker/containerd/containerd.toml

使用Docker镜像

Docker容器是从Docker镜像构建的。默认情况下,Docker从Docker Hub中获取这些映像,Docker Hub是由Docker管理的Docker注册表,Docker项目背后的公司。任何人都可以在Docker Hub上托管他们的Docker镜像,因此您需要的大多数应用程序和Linux发行版都将在那里托管图像。

要检查您是否可以从Docker Hub访问和下载图像,请键入:

1
docker run hello-world

输出将指示Docker正常工作:

1
2
3
4
5
6
7
8
9
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

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

Docker最初无法在本地找到hello-world图像,因此它从Docker Hub下载了图像,Docker Hub是默认存储库。下载映像后,Docker从映像创建了一个容器,并在容器中执行了应用程序,显示了该消息。

操作镜像

查看本机镜像

1
2
3
4
vick@debian:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 e47e309f72c8 9 days ago 372MB
redis 3.2 87856cc39862 4 months ago 76MB

查看本机运行中的容器

查看本机所有容器

1
sudo docker ps -a

启动某个容器

1
sudo docker start XXXX #XXXX可以是容器的id也可以是容器的name

停止某个容器

1
sudo docker stop XXXX #XXXX可以是容器的id也可以是容器的name

删除镜像

1
sudo docker rmi XXXX #XXXX可以是镜像的id也可以是镜像的name

删除容器

1
sudo docker rm XXXX #XXXX可以是容器的id也可以是容器的name

注意:

  1. 删除前需要保证容器是停止的 stop

  2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi)

  3. 顺序需要先删除容器再删除镜像

MySql

安装

搜索mysql镜像:

1
docker search mysql

下载mysql 5.7镜像:

1
docker pull mysql:5.7 #不带版本号默认最新

启动mysql:

1
docker run --name mysql -p 3306:3306 -v /home/vick/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lanhe -d mysql:5.7

注意,这里的容器名字叫:mysql ,root用户密码是:lanhe,映射宿主机子的端口3306到容器的端口3306,

并且将mysql的/var/lib/mysql目录映射到/home/vick/mysql/data文件夹。

设置可远程访问

进入mysql容器:

1
2
vick@debian:~$ sudo docker exec -it mysql bash
root@943fd585094f:/#

在容器内登陆Mysql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@943fd585094f:/# mysql -uroot -p  

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

查看用户信息

1
2
3
4
5
6
7
8
9
10
mysql> select host,user,plugin,authentication_string from mysql.user;                                                                                            
+-----------+---------------+-----------------------+-------------------------------------------+
| host | user | plugin | authentication_string |
+-----------+---------------+-----------------------+-------------------------------------------+
| localhost | root | mysql_native_password | *A980E23A5D33A160CCCDE9D0A4DA20115167B799 |
| localhost | mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | mysql_native_password | *A980E23A5D33A160CCCDE9D0A4DA20115167B799 |
+-----------+---------------+-----------------------+-------------------------------------------+
4 rows in set (0.00 sec)

host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码。

连接时错误提示:

解决方法:

1
2
3
4
5
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

连接数据库:

连接成功了。

Redis

安装步骤与mysql类似:

1
2
docker search  redis
docker pull redis:3.2

运行:

1
docker run --name redis -p 6379:6379 -v /home/vick/redis/data:/data  -d redis:3.2 redis-server --appendonly yes

命令说明:

--name redis :将容器命名为redis

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

-v /home/vick/redis/data:/data : 将主机中/home/vick/redis/data目录挂载到容器的/data

redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

连接、查看容器:

使用redis镜像执行redis-cli命令连接到刚启动的容器,主机IP为172.17.0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vick@debian:~$ sudo docker exec -it redis redis-cli
127.0.0.1:6379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b0df607ad3315254
redis_mode:standalone
os:Linux 4.9.0-8-amd64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:6.3.0
process_id:1
run_id:54ef1808535f61b18b9713cd9455c09396f032b4
tcp_port:6379
uptime_in_seconds:5065
uptime_in_days:0
hz:10
lru_clock:6719318
executable:/data/redis-server
config_file:

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
...