一、Centos安装docker
官方文档 https://docs.docker.com/install/linux/docker-ce/centos/
- 删除历史版本
$ sudo yum remove docker \
docker-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
- 设置仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker Engine-Community
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 启动、开机启动、重启
systemctl start docker
systemctl enable docker
systemctl restart docker
- docker 版本
docker version
二、镜像
镜像:未初始化的类
- 列出镜像列表
docker images
// REPOSITORY:表示镜像的仓库源
// TAG:镜像的标签
// IMAGE ID:镜像ID
// CREATED:镜像创建时间
// SIZE:镜像大小
- 查找镜像
官方镜像仓库
https://hub.docker.com/
docker search nginx
- 获取一个镜像
docker pull nginx
- 删除一个镜像
docker rmi nginx
docker rmi -f nginx
- 设置镜像标签
docker tag 860c279d2fec root/centos:dev
//docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
三、容器
- 新建并启动容器
docker run --name nginx01 -p 8080:80 -d --restart=always nginx
--name nginx01:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
--restart=always:无论退出状态是如何,都重启容器;
// 非创建时,更新容器为开机启动
docker update --restart=always $CONTAINER_ID
// 从本地镜像创建
docker run -d -p 8081:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins 1b17598575fe
- 列出当前所有正在运行的容器
// 查看所有容器
docker ps
//查看正在运行的容器
docker ps -a
// 查看容器信息
docker inspect $CONTAINER_ID
- 退出容器
exit
Ctrl+P+Q
- 启动、停止、重启、强制停止容器、删除已经停止的容器
docker start $CONTAINER_ID
docker stop $CONTAINER_ID
docker restart $CONTAINER_ID
docker kill $CONTAINER_ID
docker rm $CONTAINER_ID
- 查看容器日志
docker logs -f -t --tail $CONTAINER_ID
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
- 查看容器运行的进程
docker top $CONTAINER_ID
- 进入正在运行的容器并以命令行交互
//在容器中打开新的终端,不会启动新的进程
docker exec -it $CONTAINER_ID /bin/bash
//打开新的终端、启动新的进程
docker attach $CONTAINER_ID
- 从容器内拷贝文件到主机上
docker cp $CONTAINER_ID:容器内路径 目标主机路径
- 资源限制
内存限额:
允许容器最多使用500M内存和100M的Swap,并禁用 OOM Killer:
docker run -d --name nginx03 --memory="500m" --memory-swap=“600m" --oom-kill-disable nginx
CPU限额:
允许容器最多使用一个半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
允许容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus=".5" nginx
四、数据卷
- volumes
// volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
管理卷:
# docker volume create nginx-vol
# docker volume ls
# docker volume inspect nginx-vol
用卷创建一个容器:
# docker run -d --name=nginx-test -p 8080:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
# docker run -d --name=nginx-test -p 8080:80 -v nginx-vol:/usr/share/nginx/html nginx
清理:
# docker stop nginx-test
# docker rm nginx-test
# docker volume rm nginx-vol
注意:
1. 如果没有指定卷,自动创建。
2. 建议使用--mount,更通用。
- bind mounts
// bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中;实际使用的是宿主机的目录。
用卷创建一个容器:
# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
# docker run -d -it --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
验证绑定:
# docker inspect nginx-test
清理:
# docker stop nginx-test
# docker rm nginx-test
注意:
1. 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2. 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
- tmpfs
//tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能
五、Docker Dockerfile
//核心理念:将正常部署步骤写成脚本,执行,打包
//net core 使用VS自动生成
//PHP 百度模板,根据实际情况修改
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY . .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
六、仓库
Docker镜像上传至阿里云
https://www.cnblogs.com/chenjiahao9527/p/11980858.html
七、图形界面
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
八、将容器重新打包成镜像
docker commit -a "runoob.com" -m "my apache" 容器名称或id 打包的镜像名称:标签
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。