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
#启动 Docker
systemctl start docker
非特权用户使用 Docker
1.开通 root 权限
ll /etc/sudoers
chmod 755 /etc/sudoers
vi /etc/sudoers
# User privilege specification
root 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 docker
groupadd docker
#查询套接字是否是 docker 组,不是需要修改
ll /var/run/docker.sock
chgrp docker /var/run/docker.sock
#将用户加入 docker 组,然后刷新用户组
gpasswd -a xxx docker
newgrp 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 名称`进行构建
```bash
docker build -t test/myapp:v1 ./
docker build -f 指定 Dockerfile 文件所在路径和文件名
使用docker images
查看构建镜像
docker history test/myapp:v1
docker inspect test/myapp:v1
容器运维
启动容器
docker run –d --name myapp –p 80:80 test/myapp:v1
docker ps –a
docker logs myapp