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 | docker-ce: |
请注意,docker-ce
未安装,但安装的候选者来自Debian 9(stretch)的Docker存储库。
最后,安装Docker:
1 | sudo apt install docker-ce |
现在应该安装Docker,守护进程启动,并启用进程启动进程。检查它是否正在运行:
1 | sudo systemctl status docker |
输出应类似于以下内容,表明该服务处于活动状态并正在运行:
1 | docker.service - Docker Application Container Engine |
使用Docker镜像
Docker容器是从Docker镜像构建的。默认情况下,Docker从Docker Hub中获取这些映像,Docker Hub是由Docker管理的Docker注册表,Docker项目背后的公司。任何人都可以在Docker Hub上托管他们的Docker镜像,因此您需要的大多数应用程序和Linux发行版都将在那里托管图像。
要检查您是否可以从Docker Hub访问和下载图像,请键入:
1 | docker run hello-world |
输出将指示Docker正常工作:
1 | Unable to find image 'hello-world:latest' locally |
Docker最初无法在本地找到hello-world图像,因此它从Docker Hub下载了图像,Docker Hub是默认存储库。下载映像后,Docker从映像创建了一个容器,并在容器中执行了应用程序,显示了该消息。
操作镜像
查看本机镜像
1 | vick@debian:~$ sudo docker images |
查看本机运行中的容器
查看本机所有容器
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 |
注意:
删除前需要保证容器是停止的 stop
需要注意删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi)
顺序需要先删除容器再删除镜像
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 | vick@debian:~$ sudo docker exec -it mysql bash |
在容器内登陆Mysql:
1 | root@943fd585094f:/# mysql -uroot -p |
查看用户信息
1 | mysql> select host,user,plugin,authentication_string from mysql.user; |
host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码。
连接时错误提示:
解决方法:
1 | mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; |
连接数据库:
连接成功了。
Redis
安装步骤与mysql类似:
1 | docker search redis |
运行:
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 | vick@debian:~$ sudo docker exec -it redis redis-cli |