前一段时间自学了Docker,现在做个总结,方便日后查阅
Docker是一个很强大的容器,它很像虚拟机,但不是虚拟机,它可以很快的用来创建出多个虚拟环境,不需要为环境分配网卡、内存、硬盘等,每个环境之间互不影响(沙箱机制),占用很小的内存,可以创建说是秒级的。
要掌握的核心概念
- 容器
- 镜像
- 仓库
它们之间的关系大概是这样的
有了这套docker环境,我们就可以在容器上面愉快的安装部署我们的应用服务了。
- Docker服务启动
a.配置镜像加速(由于从公网获取资源比较慢,需要配置镜像加速器)修改daemon.json配置文件,填写自己的加速器地址
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
通知systemd重载此配置文件
$ systemctl daemon-reload
b.重启docker服务
$ sudo service docker restart
c.查看docker运行状态
$ sudo service docker status (should see active (running))
$ sudo docker run hello-world
- Docker 安装MySql
a.安装拉取MySQL 镜像
docker pull mysql:5.7
b.运行 mysql 容器
docker run --restart=always --privileged=true --name mysql -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=root -d mysql:5.7 --lower_case_table_names=1
c.进入mysql命令行
docker exec -it mysql bash //mysql是启动的服务name
d.登录
mysql -uroot -proot
- Docker 安装Redis
a.安装拉取 redis 镜像,拉取redis镜像,未指定tag信息,默认将拉取latest的版本
docker pull redis
b查看所有镜像
docker image
c.创建容器,运行 redis 容器,首先从本地镜像创建容器,本地没有则从公有仓库获取镜像,从该镜像创建
docker run -d -p 6380:6379 --name myredis redis
d.查看所有容器
docker container ls
docker ps -a
进入redis命令行
docker exec -it myredis bash
公有中间件、数据库等可以从公网docker-hub上拉取,web应用则需要通过dockerfile文件的形式创建
附加从网上摘的一些:
镜像操作
查找镜像:
搜索docker hub网站镜像的详细信息
docker search 关键词
下载镜像:
Tag表示版本,有些镜像的版本显示latest,为最新版本
docker pull 镜像名:TAG
查看镜像:
#查看本地所有镜像
docker images
删除镜像:
删除指定本地镜像
docker rmi -f 镜像ID或者镜像名:TAG
-f 表示强制删除
获取元信息:
#获取镜像的元信息,详细信息
docker inspect 镜像ID或者镜像名:TAG
容器操作
运行:
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像TD或镜像名:TAG
–name 指定容器名,可自定义,不指定自动命名
-i 以交互模式运行容器
-t 分配一个伪终端,即命令行,通常组合来使用
-p 指定映射端口,将主机端口映射到容器内的端口
-d 后台运行容器
-v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读
容器列表:
docker ps 查看正在运行的容器
docker ps -a -q
-a 查看所有容器(运行中、未运行)
-q 只查看容器的ID
启动容器:
docker start 容器ID或容器名
停止容器:
docker stop 容器ID或容器名
最后总结
PS:最好在Linux环境玩,Windows的安装体验太差,不习惯,官方对Linux版本的支持还是很全面的。
零零散散学了将近一周的时间,本来最初的构想是用docker来取代虚拟机,这样也减少了占用本地的磁盘和内存空间,方便本地微服务应用部署调试。镜像获取也真的是很快,结果发现上手操作,到真正用起来还是比较复杂的,部署应用还需要会写dockerfile,项目中目前也没用到,后来就放弃了。