Docker
定义:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker是一个开发运维一体化的主要的软件和配置文件
docker安装:
官方安装手册
https://docs.docker.com/install/linux/docker-ce/centos/
卸载旧版本
sudo yum remove docker-ce \
docker-ce-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
设置 yum 仓库地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存
sudo yum makecache fast
安装新版 docker
sudo yum install docker-ce docker-ce-cli containerd.io
启动, 测试
启动 docker
sudo systemctl start docker
设置 docker 开机启动
sudo systemctl enable docker
镜像加速
下面命令直接生成文件 daemon.json
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
#重新加载docker配置
sudo systemctl daemon-reload
#重启docker服务
sudo systemctl restart docker
运行 hello-world 镜像,验证 docker
sudo docker run hello-world
docker
轻量的虚拟机
Docker 充分的利用宿主集的硬件资源,操作系统的底层资源,占用资源少,启动速度快。
docker的轻量虚拟机,也称为容器。
镜像
虚拟机的静态文件
镜像名称:
容器
从镜像运行启动的虚拟机,
下载虚拟镜像
有关docker的命令
#镜像命令
docker pull mysql #(docker pull)下载命令
docker images #// 查看镜像
docker load -i ... #// 导入文件(...代表文件名)
docker run ... #//启动容器(...代表容器)
docker rmi -f ... #// 删除镜像(...镜像文件)
docker rm -f ... #// 删除镜像(...镜像文件)
docker rm -f xxx xxx xxx #//删除多个数据(xxx文件名或者是id前三位)
docker run \
-d \
--name xxx \
xxx bash #//以新命名的方式进行启动容器
docker save mysql:5.7 node:8 | gzip > app.tar.gz
#/*后台运行方式(...文件名字)*/
docker run \
-d \
...
#/*容器的命令*/
docker logs ...//日志查看(文件id的前三位)
#/*查看所有的容器*/
docker ps #//正在运行的容器
docker ps -a #//查看全部的容器包括正在运行的和退出结束的
docker stop ...#//停止容器(文件id的前三位)
docker start ...#//启动容器(文件id的前三位)
docker restart ...#//重启容器(文件id的前三位)
docker prune #//清理所有终止的容器
/*进入容器,在容器中运行指定的命令(...容器名或id前三位)*/
docker exec -it ... ls#//进入容器并执行查询操作
docker exex -it ... touch f1.txt #//进入容器并执行添加文件操作
docker exex -it ... ps #//文件进程
docker exex -it ... bash #//容器命令行提示
exit #//退出容器
数据
#//--rm 当容器退出时,自动删除 -v指定的宿机目录如果不存在会自动创建。
docker run -dit \
--name app1 \
--rm -v /user/app:/opt/app \
xxx:x
#创建一个数据卷:
docker volume create my vol
docker colume ls
docker inspect my-vol
docker run \
--dit \
--rm \
--name app2\
centos:7
docker exec it app2 bash
cd /opt/app
echo 12345646413213564>f2.txt
cd /var/lib/docker/volumes/my-vol/_data
ls
cat f2.txt
# 挂载主机目录
docker run -it --mount type=bind,source=/usr/app,target=/opt/app centos:7 bash
# 或
docker run -it -v /usr/app:/opt/app centos:7 bash
#删除指定的数据卷,如果数据卷被容器使用则无法删除
docker volume rm my-vol
#清理无主数据卷
docker volume prune
网络
docker run -d -P tomcat
# 查看容器信息
docker container ls -a
docker network ls
#新建网络
docker network create -d bridge my-net
#-d driver,网络类型,默认 bridge,也可以是 overlay(Swarm mode)
#列出网络
docker network ls
#查看网络信息
docker inspect ... #id前三位
#连接容器
docker run -it --name app1 --network my-net centos:7
#新开终端执行:
docker run -it --name app2 --network my-net centos:7
# 在两个终端中分别执行:
ping app1
ping app2
#以centos7为基础,安装oracle jdk8和tomcat7
FROM centos:7
#ADD命令将压缩包传入镜像中的指定目录,并同时解压缩
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
#为了方便,把文件夹名称改得简单一点
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
#设置环境变量
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
CATALINA_HOME=/usr/tomcat \
PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
#暴露容器的8080端口
EXPOSE 8080
#设置启动容器时自动运行tomcat
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
CATALINA_HOME=/usr/tomcat \
PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
EXPOSE 8080
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
#使用 Dockerfile 构建镜像
docker build -t tomcat:7 .
启动容器
准备存储目录
webapps目录,例如 /opt/webapps
logs目录,例如 /var/lib/tomcat-logs
mkdir /opt/webapps
mkdir /opt/webapps/ROOT
mkdir /var/lib/tomcat-logs
# 添加欢迎页
cat <<EOF > /opt/webapps/ROOT/index.html
<h1>Hello Docker!!!</h1>
EOF
启动容器,挂载目录
docker run \
-d \
-p 8080:8080 \
--name tomcat7 \
-v /opt/webapps:/usr/tomcat/webapps \
-v /var/lib/tomcat-logs:/usr/tomcat/logs \
tomcat:7
# 测试能否互联互通
ping 172.18.0.2
ping 172.18.0.3
# 进入 app1,ping宿主机和app2
docker exec -it app1 ping 172.18.0.1
docker exec -it app1 ping 172.18.0.3
docker exec -it app1 ping app2
#ng宿主机和app2
docker exec -it app1 ping 172.18.0.1
docker exec -it app1 ping 172.18.0.3
docker exec -it app1 ping app2
构建镜像
# 先准备文件夹,存放构建过程中使用的所有文件
# Dockerfile, jdk....gz, tomcat....gz
cd ~
mkdir tomcat7
cd tomcat7
cat <<EOF > Dockerfile
FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
CATALINA_HOME=/usr/tomcat \
PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
EXPOSE 8080
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
EOF
# 上传jdk和tomcat7两个压缩文件到 tomcat7 目录