文章目录
- 一、Docker的应用场景
- 二、Docker 的优点
- 三、Docker 架构
- 四、安装Docker
- 1、更新 apt 包索引
- 2、安装docker
- 3、安装完成之后,运行命令sudo docker info,检查安装状态
- 4、有可能,第一次需要手动启动服务.就需要执行下面的命令,
- 5、还需要将docker服务设置成开机启动
- 6、镜像加速
- 7、重启服务
- 五、镜像操作
- 拉取,下载镜像,一般都是从dockerhub中拉去
- 1、例如下载python镜像
- 2、列出所有的镜像
- 删除镜像
- 六、容器操作
- 1、启动容器
- 2、查看所有的容器
- 3、查看正在运行的容器
- 4、启动一个停止的容器
- 5、停止一个容器
- 6、删除一个容器(只能删除停止的容器)
- 七、搭建一个mariadb的容器
- 1、下载镜像mariadb镜像
- 2、运行容器
- 3、端口映射(端口需要放开)
- 4、进入正在运行的容器中
- 5、查看容器的日志
- 八、数据卷
- 1、作用:实现容器和宿主机之间的数据共享
- 2、查看数据卷:
- 3、查看数据卷的详细信息
- 九、搭建redis服务器
- 1、下载镜像
- 2、查看镜像是否下载成功
- 3、启动容器
- 4、进入容器中
一、Docker的应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
二、Docker 的优点
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
三、Docker 架构
Docker 包括三个基本概念:
镜像(Image):在docker中把安装包叫做镜像,镜像是启动一个服务的时候所有的配置文件
容器(Container):容器是运行镜像后的一个状态,容器才是真正提供业务的单位;镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
四、安装Docker
以ubuntu为例
1、更新 apt 包索引
sudo apt update
2、安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3、安装完成之后,运行命令sudo docker info,检查安装状态
如果是以下信息,表示安装docker成功
ubuntu@VM-24-12-ubuntu:~$ sudo docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
compose: Docker Compose (Docker Inc., v2.12.2)
scan: Docker Scan (Docker Inc., v0.21.0)
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 3
Server Version: 20.10.21
Storage Driver: overlay2
4、有可能,第一次需要手动启动服务.就需要执行下面的命令,
dockerd
5、还需要将docker服务设置成开机启动
查看是否设置为开机启动
ubuntu@VM-24-12-ubuntu:~$ systemctl list-unit-files | grep docker.service.*enabled
docker.service enabled enabled
设置开机启动 systemctl enable docker.service
关闭开机启动 systemctl disable docker.service
6、镜像加速
修改这个文件,如果没有就创建,
sudo vim /etc/docker/daemon.json
写入如下内容
{ "registry-mirrors":["https://registry.docker-cn.com"] }
7、重启服务
sudo systemctl restart docker.service
五、镜像操作
拉取,下载镜像,一般都是从dockerhub中拉去
dockerhub官方网站:https://hub.docker.com/
1、例如下载python镜像
如果后面什么都不加,默认下载最新的版本
sudo docker pull python
2、列出所有的镜像
sudo docker images
和
sudo docker image ls
删除镜像
sudo docker rm 镜像名称
和
sudo docker rmi 镜像名称
六、容器操作
1、启动容器
sudo docker run [参数] 镜像名:tag 要执行的命令
启动python容器
sudo docker run --name my1_python python:alpine
容器是进程,它执行的就是镜像名后面的命令(程序),如果这个命令(程序)执行结束,那么这个容器就退出了
2、查看所有的容器
sudo docker ps -a
3、查看正在运行的容器
sudo docker ps
4、启动一个停止的容器
sudo docker start 容器名称/容器id
sudo docker start my2_python
5、停止一个容器
sudo docker stop 容器名称/容器id
sudo docker stop my2_python
6、删除一个容器(只能删除停止的容器)
注意:只能删除停止的容器
sudo docker rm 容器名称/容器id
七、搭建一个mariadb的容器
1、下载镜像mariadb镜像
sudo docker pull mariadb:latest
2、运行容器
sudo docker run --name my_mariadb
运行容器时加的命令参数
-d:后台运行容器
–name:运行容器,执行容器名称
–env:设置环境变量
-p:端口映射 -p 宿主机端口:容器端口(宿主机的端口需要没有占用的,想要远程访问,云服务器的防火墙需要放开对应的端口)
-v:容器卷映射 -v:宿主机目录:容器目录
后台运行容器,并且将容器名称命名为my_mariadb,如下
ubuntu@VM-24-12-ubuntu:~$ sudo docker run -d --name my_mariadb1 mariadb:latest
0cfb895105b83c788d780c973e975de726e71174269a1ca37763104b84402a7e
查看刚刚运行的容器状态
ubuntu@VM-24-12-ubuntu:~$ sudo docker ps -a | grep my_mariadb1
4ab8a615062a mariadb:latest "docker-entrypoint.s…" 2 minutes ago Exited (1) 2 minutes ago my_mariadb1
my_mariadb1
3、端口映射(端口需要放开)
启动容器
sudo docker run -d --name my-mariadb -p 8848:3306 --env MARIADB_USER=zhilong --env MARIADB_PASSWORD=123456 -env MARIADB_ROOT_PASSWORD=docker mariadb:latest
连接数据库
ubuntu@VM-24-12-ubuntu:~$ mysql -h82.156.178.247 -u zhilong -P8848
ERROR 1045 (28000): Access denied for user 'zhilong'@'82.156.178.247' (using password: NO)
ubuntu@VM-24-12-ubuntu:~$ mysql -h82.156.178.247 -u zhilong -P8848 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.5-10.10.2-MariaDB-1:10.10.2+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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.
4、进入正在运行的容器中
sudo docker exec -it 容器名称/容器id /bin/bash
此时进入的不是服务器了,是服务器中的容器了,是一个精简的linux操作系统
ubuntu@VM-24-12-ubuntu:~$ sudo docker exec -it 9181049dae0e /bin/bash
root@9181049dae0e:/# ls
bin dev etc lib lib64 media opt root sbin sys usr
boot docker-entrypoint-initdb.d home lib32 libx32 mnt proc run srv tmp var
退出容器:exit
进入容器连接数据库操作
root@9181049dae0e:/# mysql -u zhilong -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.10.2-MariaDB-1:10.10.2+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
5、查看容器的日志
sudo docker logs 容器名称/容器id
八、数据卷
1、作用:实现容器和宿主机之间的数据共享
使用数据卷实现数据持久化
数据备份、数据共享
将宿主机中的目录和容器中的目录进行映射
将宿主机中的文件和容器中的文件进行映射
将数据卷与容器中的目录进行映射
2、查看数据卷:
sudo docker volume ls
3、查看数据卷的详细信息
sudo docker inspect 数据卷名称
例如
ubuntu@VM-24-12-ubuntu:~$ sudo docker inspect de2270508292c998a41b3cea4fabb9bd763cde4b7b6fdaa9856035365ec73768
[
{
"CreatedAt": "2022-12-24T23:02:54+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/de2270508292c998a41b3cea4fabb9bd763cde4b7b6fdaa9856035365ec73768/_data",
"Name": "de2270508292c998a41b3cea4fabb9bd763cde4b7b6fdaa9856035365ec73768",
"Options": null,
"Scope": "local"
}
]
进入容器到/var/lib/mysql路径(存储数据)
root@9181049dae0e:/var/lib/mysql# cd /var/lib/mysql
root@9181049dae0e:/var/lib/mysql# ls
aria_log.00000001 ddl_recovery.log ib_logfile0 ibtmp1 mysql performance_schema
aria_log_control ib_buffer_pool ibdata1 multi-master.info mysql_upgrade_info sys
挂载点:/var/lib/docker/volumes/36133d8e09693ae90d41b8492886f8de685a3efef6a15a9dd5e3a67e52ecf17d/_data
aria_log.00000001 aria_log_control ddl_recovery.log ib_buffer_pool ibdata1 ib_logfile0 ibtmp1 multi-master.info mysql mysql_upgrade_info performance_schema sys
ubuntu@VM-24-12-ubuntu:/var/lib/docker/volumes/36133d8e09693ae90d41b8492886f8de685a3efef6a15a9dd5e3a67e52ecf17d/_data$ pwd
/var/lib/docker/volumes/36133d8e09693ae90d41b8492886f8de685a3efef6a15a9dd5e3a67e52ecf17d/_data
ubuntu@VM-24-12-ubuntu:/var/lib/docker/volumes/36133d8e09693ae90d41b8492886f8de685a3efef6a15a9dd5e3a67e52ecf17d/_data$
容器卷映射
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker run -d --name mydb -p 8848:3306 -v /home/ubuntu/ck14/db:/var/lib/mysql --env MARIADB_USER=zhilong --env MARIADB_PASSWORD=123456 --env MARIADB_ROOT_PASSWORD=root mariadb:latest
04bf1742a81fab64d4fe2817d4651a2aa57fa33ba5f0a0ac7fdeef09cc8cd1c5
ubuntu@VM-24-12-ubuntu:~/ck14/db$ ls
aria_log.00000001 aria_log_control ddl_recovery.log ib_buffer_pool ibdata1 ib_logfile0 ibtmp1 multi-master.info mysql mysql_upgrade_info performance_schema sys
宿主机中新建数据表
容器中可以查看数据表
root@04bf1742a81f:/# mysql -h82.156.178.247 -uroot -P8848 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.10.2-MariaDB-1:10.10.2+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| ck_14 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.001 sec)
MariaDB [(none)]> use ck_14
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [ck_14]> use ck_14;
Database changed
MariaDB [ck_14]> show tables;
+-----------------+
| Tables_in_ck_14 |
+-----------------+
| ck_14 |
+-----------------+
1 row in set (0.001 sec)
当把容器删除后,宿主机中的数据不会删除
再次进行映射,
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker run -d --name mydb -p 8848:3306 -v /home/ubuntu/ck14/db:/var/lib/mysql --env MARIADB_USER=zhilong --env MARIADB_PASSWORD=123456 --env MARIADB_ROOT_PASSWORD=root mariadb:latest
6c895653ce5ca9cab5302736412a1f8e3325d21d6fb47817c7d75efe71586388
root@6c895653ce5c:/# cd /var/lib/mysql/
root@6c895653ce5c:/var/lib/mysql# ls
aria_log.00000001 ck_14 ib_buffer_pool ibdata1 multi-master.info mysql_upgrade_info sys
aria_log_control ddl_recovery.log ib_logfile0 ibtmp1 mysql performance_schema
九、搭建redis服务器
1、下载镜像
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker pull redis:alpine
2、查看镜像是否下载成功
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker images | grep redis
redis alpine 8ace02fae412 8 days ago 29.9MB
3、启动容器
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker run -d --name my_redis redis:alpine
d4b03ee711c4542120d56f90624c2356a5205d70ed61db0b57f768af421311e7
4、进入容器中
ubuntu@VM-24-12-ubuntu:~/ck14/db$ sudo docker exec -it my_redis /bin/sh
/data # ls
/data # redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>