文章目录
Docker 概述
目的:
开发项目,服务器配置应用环境例如Redis,jdk,MySQL,jdk,ES,Hadoop等,但是配置比较麻烦,不能够跨平台使用,通过docker
直接搞定所有的配置和环境。通过下载Docker仓库中的镜像,可以直接运行。Docker
对应用打包装箱,相互隔离没有避免产生冲突。
作用:
Docker
可以代替虚拟机,轻量级模拟环境,提高运行速度和占用的存储空间。
- 虚拟机:占用资源多,启动慢,冗余步骤多
- 容器技术:不是模拟完整操作系统,直接运行在宿主机的内核中,没有自己的内核,每个容器内都是自己隔离的,互不影响。
Docker开发运维
- 应用快速交付部署:打包发布测试,一键运行
- 便捷升级和扩缩容:打包项目,运行在另一台服务器上直接进行扩容
- 简单的运维:环境开发高度一致
- 高效资源利用:Docker内核级别虚拟化,一个物理机上可以运行多个容器。
架构
- 镜像(image):镜像就好比一个模板,可以通过模板来创建容器服务,例如:
tomcat
镜像 -> run ->tomcat01
容器(提供服务),通过镜像可以创建多个容器。最终的服务项目运行就是在容器中的。 - 容器(container):独立运行一个或者一组应用,通过镜像来创建。通过命令来执行
- 仓库(registory):存放镜像的地方
Docker安装/删除
菜鸟安装教程
1. 删除旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 需要的安装包,设置国内镜像
sudo yum install -y yum-utils \
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
4. 启动并测试
启动
sudo systemctl start docker
查看版本
sudo docker version
测试运行
sudo docker run hello-world
docker
没有发现镜像,自动拉取最新版本
5.删除
卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
删除目录资源
sudo rm -rf /var/lib/docker
6. 配置阿里云镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxsouy.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker工作流程
底层原理
Docker
是一个 Client-Server结构系统,Docker的守护进程运行在主机上,通过Socket从客户端访问,外界Linux服务器和内部Docker容器是相互隔离的,如果想访问进程端口则需要通过进行连接,否则访问不到
Docker为什么比VM快?
- Docker有着比虚拟机更少的抽象层
- Docker利用的是宿主机的内存,VM用的是Guest OS,需要自己新建
HelloWorld流程
docker run
会在本机寻找镜像,判断是否有镜像,如果有镜像就使用,没有则下载- 下载时
DockerHub
上是否有镜像,没有报错,有则下载
Docker常用命令
帮助命令
版本
docker version
详细信息,系统信息
docker info
帮助命令
docker 命令 --help
镜像命令
docker images
-a 列出所有镜像
-q 只显示id
docker search 镜像名
-f 进行过滤
--filter=stars=3000 收藏大于三千
docker pull NAME[:tag]
tag 表明版本号,如果不标明,则下载最新版本
Docker采用分层下载模式,例如新版本和旧版本,通过分片,已有版本就不需要进行下载极大的节省空间。
删除节点,可以通过名称或者ID删除
docker rmi
-f 全部删除
获取所有的ID进行删除
docker rmi -f $(docker images -aq)
容器命令
有了镜像才可以创建容器,使用CentOS
进行学习
新建容器并启动
docker pull centos
docker run [参数] image
--name="Name" 容器名字,用来区分容器
-d 后台方式
-it 交互方式运行,进入容器查看内容
-p 指定端口
-p 8080:8080
-p 主机端口:容器端口
-P 随机指定端口
-e 设置环境变量
eg:docker run -p 3306:3306 --name docker_mysql -e=MYSQL_ROOT_PASSWORD=root -d mysql
exit 退出
运行容器
docker ps 查看正在运行的容器
-a 查看曾经运行过的容器
-n=? 显示最新创建的容器
-q 只显示容器编号
退出容器
exit 退出容器并且停止
删除容器,不能删除正在运行的
docker rm
docker rm -f $(docker ps -aq) 删除所有容器
-f 强制删除
docker ps -a -q|xargs docker rm 删除所有容器
开启容器
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器ID
其他常用命令
后台启动容器
后台启动容器
docker rum -d centos
Docker后台运行centos发现自动停止了。Docker容器使用后台运行,必须要有一个前台进程,Docker没有前台应用,就会自动停止
查看日志
查看日志
docker logs
-tf 显示日志
--tail number 显示一定数量的日志
查看进程信息
查看容器中的进程信息
docker top 容器ID
查看镜像数据
查看镜像元数据
docker inspect 容器ID
查看镜像详细数据
通常容器都是后台运行的,需要进入容器修改一些配置。
- docker exec 进入容器后开启新的终端,可以在里面操作
- docker attach 进入容器正在执行的终端,不会启动新的进程
进入当前运行的容器
docker exec -it 容器ID /bin/bash
docker attach 容器ID
docker exec -it docker_mysql bash 进入mysql容器
从容器内拷贝到主机上
docker cp 容器ID:容器内路径 目的的主机路径
docker cp 599aba1a80d1:/home/duplicate.java /home
通过-v可以连接两个文件