为什么要使用Docker?
- 减少编写代码和在生产环境中运行代码之间的延迟。
使用Docker有什么好处?
- 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
CentOS安装Docker
- 卸载旧版本
$ 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 \
device-mapper-persistent-data \
lvm2
- 设置镜像仓库(阿里云)
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker相关的 (docker-ce 社区版 ee 企业版)
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker,查看版本
sudo systemctl start docker
docker version
- 测试helloword,(由于本地没有,所以是从远程仓库拉取)
sudo docker run hello-world
- 查看helloword镜像
docker images
- 阿里云镜像加速
依次点击
- 登录阿里云
- 镜像容器服务
- 镜像中心
- 镜像加速器
- 选择对应的系统,依次执行命令
Docker运行原理
run
的运行流程图
- Docker是如何工作的?
Docker
是一个Client-Server
结构的系统Docker
的守护进程运行在主机上,通过Socket
从客户端访问Docker-Client
接收到Docker-client
的指令,就会执行这个指令
Docker
为什么比虚拟机快?
- 它有着比虚拟机更少的抽象层。
- 它利用的是宿主机的内核,而虚拟机需要
GuestOS
,新建一个容器的时候,docker
不需要像虚拟机一样重新加载一个操作系统内核,避免引导。 - 虚拟机加载
GuestOS
,是分钟级别的,而Docker
是利用宿主机的操作系统,省略这个复杂的引导过程,秒级别的。
常用命令
镜像命令
docker -image --help
帮助docker -image -a
显示所有的镜像docker -image -q
只显示镜像的IDdocker search XXX
搜索某个镜像, 如:docker search mysql
docker pull XXX
下载某个镜像,如:docker pull mysql:5.7
docker rmi -f “id”
根据id删除镜像, 如:docker rmi -f bf756fb1ae65
docker rmi -f $(docker images -aq)
删除全部的镜像
容器命令
说明:我们有了镜像才能创建容器
docker pull centos
下载centos镜像docker run -it ***
新建容器并启动
docker run [可选参数] image
[可选参数说明]
--name="***" 容器名字,用来区分容器
-d 后台方式运行
-i 或者 -t 使用交互方式运行,进入容器查看内容
-p(小写) 指定容器的端口
-P(大写) 随机指定端口
exit
停止容器并退出Ctrl + P + Q
退出不停止docker ps
查看当前运行中的容器docker ps -a
查看当前运行中+曾今运行过的的容器docker rm 容器ID
删除指定容器docker rm -f $(docker ps -aq)
删除所有的容器docker ps -a -q|xargs docker rm
删除所有的容器docker start/stop/restart/kill 容器ID
启动,停止,重启,强制停止某容器
常见其他命令
- 后台启动容器
docker run -d centos
- 问题:当
docker ps
查看运行的容器的时候,发现centos停止了 - 原因:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止。
- 查看容器日志
docker logs -tf --tail (要显示的条数) 容器id
:查看容器进程信息docker top 容器id
查看容器进程信息docker inspect 容器id
查看镜像的元数据docker exec -it 容器id
进入当前正在运行的容器,进行一些配置的修改docker attach 容器id
进入当前容器,可以看到他正在运行的东西
- 从容器拷贝文件到主机上
docker cp 容器id:/home/test.java /home