目录
一、Docker的基本组成
二、安装工作
1、安装Docker
环境:CentOS7 内核3.10.0-1160.el7.x86_64
(uname -r即可查看 虚拟机内核版本)
1、卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2、需要的安装包
yum install -y yum-utils
3、设置阿里云镜像仓库
yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、更新yum软件包索引
yum makecache fast
5、安装最新版docker
yum install docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
7、测试
至此docker已经安装完毕,执行 docker version可查看docker的详细版本信息
执行docker run hello-world测试
dokcer会自动拉去远程镜像
执行docker images查看下载的hello-world镜像
补充
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 删除资源
rm -rf /var/lib/docker
docker的默认工作路径
/var/lib/docker
2、配置镜像加速
找到阿里云=》容器镜像服务,配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nwbqvmhu.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker配置完毕!!!
docker run 的运行流程图
docker工作流程
不同进程相互隔离
三、Docker常用命令
1、基础命令
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
docker COMMAND --help
命令的帮助文档地址:docker | Docker Documentation
2、镜像命令
1.docker images 查看本地主机的所有镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB可选参数,经常一起使用
-a 列出所有镜像
-q 列出镜像id
2.docker search 搜索镜像
例如docker search mysql
3.docker pull 镜像名[:tag] 下载镜像
默认下载最新版本,tag即代表版本
可以docker pull mysql:5.7代表下载5.7版本的mysql,前提是镜像仓库有5.7版本
4.docker rmi 删除镜像
#1.删除指定的镜像id
[root@localhost~]# docker rmi -f 镜像id
#2.删除多个镜像id
[root@localhost~]# docker rmi -f 镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@localhost~]# docker rmi -f $(docker images -aq)
docker rmi -f $(docker images -aq)
此命令查出所有的镜像id,并且执行递归删除,非常危险
3、容器命令
如拉取一个centos容器
docker pull centos
运行容器
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
进入容器,若未设置名称,则默认名称为镜像id,/bin/bash调取控制台
[root@localhost~]# docker run -it centos /bin/bash
退出容器
#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q 不停止容器退出
[root@localhost/]# exit
exit
[root@localhost~]#
列出运行过的容器
#docker ps # 列出当前正在运行的容器 -a # 列出所有容器的运行记录 -n=? # 显示最近创建的n个容器 -q # 只显示容器的编号
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
4、其他常用命令
1.日志的查看:
常用:
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数
2.查看容器中进程信息
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
3.查看容器的元数据
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
4.进入当前正在运行的容器
因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置
方式一:
[root@localhost~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@c703b5b1911f /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root 279 0 0 03:54 pts/0 00:00:00 /bin/bash
root 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root 316 279 0 03:56 pts/0 00:00:00 ps -ef
方式二:
[root@localhost~]# docker attach c703b5b1911f
docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程
5.拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
[root@localhost~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# cd home
[root@c703b5b1911f home]# ls
#touch 新建文件
[root@c703b5b1911f home]# touch test.java
[root@c703b5b1911f home]# ls
test.java
[root@c703b5b1911f home]# exit
exit
[root@localhost~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c703b5b1911f centos "/bin/sh -c 'while t…" 35 minutes ago Up 35 minutes pedantic_banach
[root@localhost~]# docker cp c703b5b1911f:/home/test.java /home
[root@localhost~]# ls /home
hai pan test.java
6、进入曾经运行过的容器
docker start [容器名 或容器id]
四、部署示例
1、部署nginx
命令:
[root@localhost~]# docker search nginx # 查找
[root@localhost~]# docker pull nginx # 下载
[root@localhost~]# docker run -d --name nginx -p 9001:80 nginx # 启动
# 备注
-d 后台运行
--name 给容器命名
-p 9001:80 将宿主机的端口3334映射到该容器的80端口
[root@localhost~]# docker run -d --name nginx -p 9001:80 nginx
e2f7da87581a49d74096814ea8a8ea4dcc739c398f78f9a187807f9e34e8133e
测试访问:
注意:虚拟机,容器均有防火墙,作学习使用可关闭虚拟机防火墙,或者开放端口
查看防火墙状态: systemctl status firewalld.service
执行关闭命令: systemctl stop firewalld.service
执行开机禁用防火墙自启命令 : systemctl disable firewalld.service
启动:systemctl start firewalld.service
防火墙随系统开启启动 : systemctl enable firewalld.service
2、部署Tomcat
拉取镜像并后台启动
docker pull tomcat:9.0
docker run -d --name Tomcat -p 9001:8080 tomcat:9.0
上述方式启动后,外部访问界面会出现404
解决方法:
进入Tomcat容器,并开启一个终端
docker exec -it Tomcat /bin/bash
修改Tomcat的webapps文件夹,因为文件夹为空,故页面访问404
可以将webapps.dist内容复制到webapps中即可
此时测试访问
成功!
五、Dokcer镜像详解
什么是镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。
Docker镜像加载原理
镜像分层
如何提交一个Docker镜像
使用docker commit 命令提交容器成为一个新的版本
docker commit -m=“提交的描述信息” -a="作者" 容器id 目标镜像名:[TAG]
由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:
其中,红框代表镜像名,必须小写,至此提交了一个镜像
查看镜像:
docker查看镜像挂载的目录结构
docker inspect mysql | grep Mounts -A 20