Docker新一代容器技术
Docker的定位是一个应用容器平台。
Docker和传统虚拟机的区别
Docker的核心架构
镜像:一个镜像代表一个应用环境,他是个只读的文件 ,如mysq|镜像 tomcat镜像,nginx镜像等
容器: 镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写
仓库: 用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置
dockerFile: docker生成镜像配置文件用来书写自定义镜像的一些配置
tar: 一个对镜像打包的文件,日后可以还原成镜像
安装 Docker
卸载系统上原有Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装需要的安装包yum-utils
yum install -y yum-utils
设置镜像仓库地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fase
安装Docker
yum install docker-ce docker-ce-cli containerd.io -y
启动Docker
systemctl start docker
查看Docker版本
docker version
Dcoker 配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2a15cnn5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker常用命令
docker version
docker info
docker --help
Docker镜像
查看镜像
docker images
docker images -q // 只查看镜像ID
搜索镜像
docker search tomcat // 从docker仓库搜索 tomcat 镜像
拉取镜像
docker pull nginx:1.12 // 拉取1.12版本的nginx镜像
删除镜像
docker rmi -f hello-world // 强制删除容器和镜像
Docker 容器
创建容器
docker run
-d 后台运行
-p 本机端口:镜像容器端口
--name 为容器起一个别名
$ docker run -d -p 80:80 --name vi-nginx nginx:1.12
删除容器
docker rm -f 容器id或容器别名
docker rm -f $(docker ps -aq) // 删除所有容器
查看容器进程
docker ps
docker ps -a // 查看所有运行过的容器进程
停止容器
docker stop 容器id或容器别名
开启创建过的容器
docker start 容器id或容器别名
重启容器
docker restart 容器id或容器别名
立即停止容器运行
docker kill 容器id或容器别名
查看容器内进程
docker top 容器id或容器别名
查看容器内部细节
docker inspect 容器id
查看容器运行日志
docker logs -t -f 容器id或容器别名
容器内数据交互
进入容器内部
docker exec -it 容器id或容器别名 /bin/bash
容器内部安装软件
apt-gat update
apt-get install vim
退出容器
exit
将容器打包为镜像
docker commit -a="作者" -m="描述信息" 容器id 目标镜像名称:TAG
从容器中复制文件到宿主机目录中
docker cp 容器id:/user/share/nginx/html ./ // 拷贝容器中指定目录到宿主机指定目录
设置容器和宿主机共享目录
docker run -d -p 80:80 -v ~/html:/usr/share/nginx/html nginx:1.12
// 将nginx镜像中的html目录映射到~/html目录
打包镜像为 tar 文件
docker save 镜像名(不推荐用镜像id) -o 镜像名.tar
加载tar文件镜像
docker load -i XXX.tar
Docker 镜像原理
镜像是什么?
镇像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,
它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境安量和配置文件。
为什么一个镜像会那么大?
联合文件系统
Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来
一层层的叠加, 同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。
这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把
各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录.
Docker的镜像实际是由一层一层的文件系统组成。
比如:有多个镜像都是从相同的base镜像构建而来的,那么宿主机只需在磁盘中保存一份base镜像。
同时内存中也只需要加载一份base镜像, 就可以为所有容器服务了。而且镜像的每一层都可以被共享。
Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称为容器层,容器层之下都叫镜像层。
Docker安装常用软件
MySQL
docker pull mysql:5.7
docker run -d -p 3306:3306 --name vi-mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7
将容器数据位置与宿主机位置挂载保证数据安全
docker run -v /root/mysql/data:var/lib/mysql -v /root/mysql/conf.d:/etc/mysql/conf.d
Redis
docker pull redis:5.0
默认情况下redis官方没有提供redis.conf配置文件,需要去官网下载指定版本的配置文件
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
docker run -d -p 6379:6379 -v ~/redis:/usr/local/etc/redis
--name vi-redis redis:5.0 redis-server /usr/local/etc/redis/redis.conf
修改redis.conf 中的 bind 0.0.0.0
tomcat
docker pull tomcat:jdk8-adoptopenjdk-hotspot
docker run -d -p 8080:8080 --name vi-tomcat tomcat:jdk8-adoptopenjdk-hotspot
-v ~/webapps:/usr/local/temcat/webapps
DockerFile
Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。
主要作用是用来构建docker镜像的构建文件。
DockerFile的保留命令