Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化;容器是完全使用沙箱机制,相互之间不会有任何接口。
可以理解为寄存在主机上的特殊的虚拟机,它利用特殊的虚拟化技术,比一般的虚拟化技术能够更加高效合理的利用资源;一台主机上可以创建众多的容器,通过特定的方式与主机共享硬件资源,并且使用特定的端口访问特定的文件;通过 Docker ,一台主机能够运行多种不同的服务。
原理
网络

安装完 Docker 系统会自动添加一个供 Docker 使用的网桥docker0,
共五种模式,docker run 后面使用 —net=进行配置
bridge
dokcer网络的默认设置,为容器创建独立的网络命名空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式
host
这个模式下创建出来的容器,直接使用容器宿主机的网络命名空间,将不拥有自己独立的 Network Namespace,即没有独立的网络环境,使用宿主机的 IP 和端口
none
为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有 lo,用户可以在此基础上,对容器网络做任意定制(pipework配置ip)
container
指定一个已有的容器,共享该容器的 IP 和端口,除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的
—net=container:NAME_or_ID
自定义
使用第三方的网络实现或者创建单独的 bridge 网络,提供网络隔离能力
入门
安装
#先更行一下软件包缓存yum update#ce 代表社区版yum install -y docker-ce#使用官方脚本安装curl https://get.docker.com | sh
#设置自启动systemctl enable docker#启动 Dockersystemctl start docker
非特权用户使用 Docker
1.开通 root 权限
ll /etc/sudoerschmod 755 /etc/sudoersvi /etc/sudoers# User privilege specificationroot ALL=(ALL:ALL) ALL#允许 xxx 组成员使用 sudo,需要密码%xxx ALL=(ALL:ALL) ALL#允许 xxx 组成员使用 sudo,免密%xxx ALL=(ALL:ALL) NOPASSWD: ALL#允许 xxx 使用 sudo,需要密码xxx ALL=(ALL:ALL) ALL#允许 xxx 使用 sudo,免密xxx ALL=(ALL:ALL) NOPASSWD: ALL
2.加入 docker 组
Docker 安装之后默认会创建 docker 组,它拥有读取套接字权限,因此将该普通用户加入 docker 组就有访问 unix 套接字的权限,然后刷新用户的初始组即可。
#查询 docker 组是否创建,不存在需要手动创建cat /etc/group | grep dockergroupadd docker#查询套接字是否是 docker 组,不是需要修改ll /var/run/docker.sockchgrp docker /var/run/docker.sock#将用户加入 docker 组,然后刷新用户组gpasswd -a xxx dockernewgrp xxx
镜像
docker search [镜像名称]docker pull [镜像名称]docker run -d --name=demo -p 8080:80 [镜像名称]
管理
常用命令

#查看运行中的容器docker ps#查看所有容器,包括停止的docker ps -a#查看安裝的镜像docker images#正常停止容器docker stop <容器名称/ID>#启动已有容器docker start <容器名称/ID>#强制停止容器docker kill <容器名称/ID>#进入容器,运行脚本docker exec -it <容器名称/ID> /bin/bash#查看容器日志docker logs <容器名称/ID> -f
镜像构建
构建镜像有两种方法:
- 使用 docker commit 命令
- 使用 docker build 命令和 Dockerfile 文件
Dockerfile
https://m.runoob.com/docker/docker-dockerfile.html
在项目根目录创建 Docker 文件夹(名字自定)
切换到该文件夹,创建 Dockerfile 文件 ```bash vi Dockerfile
指定基础镜像,只能一个
FROM nginx
提供联系方式等信息
MAINTAINER MyTestAPP
拷贝文件
COPY ./dist/ /usr/share/nginx/html/ COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
指令执行成功会创建一个新的镜像层,然后继续执行 Dockerfile 中的下一个指令
RUN xxxx
指定容器端口号
EXPOSE 80
设置容器启动后第一个命令,docker run 附加 —entrypoint 会被覆盖
ENTRYPOINT [“top”,”-b”, “-H”]
设置容器启动的第一个命令的默认参数,docker run 带有其他命令参数会被覆盖
CMD [“/usr/sbin/sshd” , “-D”]
保存文件,执行`docker build -t 名称`进行构建```bashdocker build -t test/myapp:v1 ./docker build -f 指定 Dockerfile 文件所在路径和文件名
使用docker images查看构建镜像
docker history test/myapp:v1docker inspect test/myapp:v1
容器运维
启动容器
docker run –d --name myapp –p 80:80 test/myapp:v1docker ps –adocker logs myapp
