Docker启动 -- 潘登同学的Linux笔记
Docker是什么
Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
就类似于Python的虚拟环境
Docker安装
连接到虚拟机上...
# 连接虚拟机
systemctl stop firewalld
# 关闭selinux
vim /etc/selinux/config
SELINUX=disabled
# 安装docker引擎
yum install -y docker
# 云服务器可以选择自带Docker 上面的就别管了
# 启动docker
systemctl start docker
# 设置docker自启动
systemctl enable docker
# 测试docker是否安装成功
docker run hello-world
Docker 下载镜像
下载镜像就是类似于安装软件
# 如果不指定tag默认下载最新版
docker pull 镜像名字:[tag]
# 查看主机上已有的镜像
docker images
# 搜索镜像
docker search mysql
# 删除镜像
docker rmi feb5d9fea6a5
# 如果删除失败,先关闭
docker rm [镜像名] or docker rm [image id]
核心命令-容器
有了镜像,就可以创建容器, 宿主机、虚拟机、容器的关系是这样的...
在window的宿主机中可以装虚拟机Linux,在Linux中采用Docker技术,能创建很多个容器,这些容器分别可以执行不同的东西..
启动容器
# 创建容器 (使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。)
docker create -it [镜像名字]
docker start [镜像ID]
# 列出容器
docker ps
# 显示未启动容器
docker ps -a
# 返回未启动容器id号
docker ps -aq
# 新建并启动容器
docker run 镜像名字
docker run 镜像名字 /bin/echo 'hello world'
# 下面命令则启动一个bash端,运行用户交互
docker run -t -i 镜像名字 /bin/bash -c "while true;do echo pd;sleep 1;done"
# 更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。
docker run -d 镜像名字 /bin/bash -c "while true;do echo pd;sleep 1;done"
Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
- 利用镜像创建并启动一个容器。
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被终止。
关闭容器
# 终止容器
docker stop [容器id]
# 将一个运行态的容器终止,然后再重新启动
docker restart [容器id]
# 进入容器
进入容器
在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令、docker exec命令,以及nsenter工具等。
# 进入容器
docker attach [容器id]
# 退出容器,并停止容器
exit
# 退出容器,但不停止容器
ctrl + p + q
# 进入容器,退出的时候也不会终止
docker exec -it [容器id]
# 删除容器
docker rm [容器id]
# -f, --force=false强行终止并删除一个运行中的容器。
# -l, --link=false删除容器的连接,但保留容器。
# -V,--volumes=false删除容器挂载的数据卷。
核心命令-其他
查看日志
# 查看日志
docker logs [容器id]
# -f, --follow 跟踪实时日志
# --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
# --tail string 从日志末尾显示多少行日志, 默认是all
# -t, --timestamps 显示时间戳
# --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
# 查看容器里面的进程
docker top [容器id]
# 从容器拷贝文件到主机上
docker cp [容器id]: 容器内路径 目录路径
MySQL服务
# 使用sql语句 select version() from dual 能查看mysql版本
docker search mysql
docker search mysql
# 前一个端口号是主机映射 后一个端口的mysql本来的端口,是在容器中的端口
docker run -d --name my_mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
# 进入容器
docker exec -it [容器id] /bin/bash
# 进入mysql
mysql -uroot -p
# 输入密码,与linux一样,密码长度不可见
show databases;
在主机上连接,先把防火墙放行了,在云服务器中选择防火墙选择all
Vmware与Docker的区别
Vmware是重量级的虚拟机,完整模拟了系统的硬件与操作系统,举个栗子,如果我们想安装回Windows XP去玩古老的蜘蛛纸牌,那么只需要给Vmware分配内存,指定操作系统,然后让他伪造一个操作系统即可
而Docker是轻量级虚拟机,他只会造虚拟网卡,造软件,本质上来说他不是一个虚拟机,他会创造虚拟实例,虚拟实例会共享Linux内核,所以是依赖于Linux的一个管理工具
docker虽然说也能运行在Windows或者Mac上,是因为这两个操作系统内置了Linux内核,docker还是调用Linux内核进行操作的
因为Vmware是要实际分配硬件的, 用自己的笔记本,顶多分配12个(假若一个虚拟机要1G,笔记本内存16G,windows占4G)
那么腾讯云等一系列云平台卖的云服务器,就是把一台大计算机,切出很多个Vmware(或者类似的)虚拟环境,然后给用户使用的,因为虚拟机之间互不影响,所以是可行的