相信大家都用过VMware、VisualBox这类虚拟机,每个虚拟机都有自己的操作系统,可以给虚拟机分配固定的cpu和内存。
docker就是linux容器的封装。对容器中的进程来说,进程所有接触到的文件和资源都是虚拟的,这样就能和底层系统隔离,从而拥有更高的安全性。容器的cpu和内存等资源也是分配好的,进程使用的资源不会超过预设的上限,进而防止主机宕机的情况发生。
docker容器是可复制可扩展的,当我们需要运行一个程序时,可以真正做到招之则来挥之则去,不用担心卸载不干净,有残留的情况。
docker的三个基本概念
- Repository仓库
存放各种镜像的仓库,仓库可分为共有仓库和私有仓库,默认使用的是官方共有仓库(https://hub.docker.com/)。
- Image镜像
可以将镜像看成一个系统的安装包,里面包含了一个虚拟系统和一些程序。
- Container容器
镜像的运行时,镜像运行起来后其本身就是一个容器。
以下图展示了Docker客户端、服务端、仓库之间的关系。
安装dockercentos下安装
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动docker daemon服务
sudo systemctl start docker
docker容器
启动docker容器
启动容器前,我们需要有一个镜像,镜像本身就是一个简化的linux系统,里面包含了我们要启动的程序。
docker官方的镜像源:https://hub.docker.com/
我们使用官方镜像源来启动一个mysql
docker run --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
此时就启动了一个端口号为3306,root密码为123456的mysql
- -e 环境变量=值
- -i 表示容器启动后,可以使用键盘进行操作
- -t 表示容器启动后,分配一个伪终端,与服务器建立一个会话
- centos 参数,表示运行的镜像名称
- /bin/bash 表示运行容器中的bash应用程序
- -v 宿主机目录:虚拟机目录:[option] 将宿主机上的磁盘挂载到容器,option可为rw读写,ro只读
- –rm 表示容器退出时自动删除容器,具体参照下面的使用
- -p 6379:6379 宿主机端口:虚拟机端口 指定容器端口并暴露在外(可指定多个)
- -d 在后台启动
- –name 指定容器名称
- -u 指定启动容器使用的用户
- -h 指定访问ip端口 或 域名
- –link 容器名/id:别名,直接ping容器名或别名可与其他容器通讯
- –privileged=true 容器拥有root权限
- -m 512m 指定启动分配的内存大小
- –restart=always 随着docker容器启动而启动
- –entrypoint bash 以bash的形式启动,覆盖原有的启动方式
- –ip=192.168.xx.xx 指定ip
- –network network_name 自定义容器网络
停止docker容器
注意:当启动时加了--restart=always停止容器后会自动重启
docker stop xxx
当使用该命令停止容器时会向容器内的进程发出 kill -15 的指令,当超过10秒后未响应会强制停止
可以使用以下命令指定等待时长
docker stop --time=20 xxx
导出/导入
当我们运行容器时对容器进行操作,容器产生文件后我们想保留当前容器状态可将容器导出为镜像
docker export container > container.tar
导入镜像
docker import container.tar my_img:latest
查看容器日志
我们在容器中运行程序时可使用logs查看容器日志
docker logs [-f] my-mysql
- -f 查看实时日志
- –tail=100 表示查看最新的100行日志
拷贝文件
将宿主机文件拷贝入容器
docker cp testfile container:/home
将容器中文件拷贝到宿主机
docker cp container:/home/testfile ./
其他命令
# 容器无法正常停止时可kill容器 docker kill container # 启动容器 docker start container # 重启容器 docker restart container # 删除容器 docker rm container # 查看容器运行状态 docker stats [container]



