Docker是一款开源的应用容器引擎,可以将应用程序和依赖项打包到一个可移植的容器中,快速发布到Linux机器上并实现虚拟化,实现更高效地构建、部署和管理应用程序。从logo理解,鲸鱼就是服务器,集装箱就是容器,而应用程序及依赖项就是货物。
在实际工作中会分别给nginx、数据库、redis、后端项目等都创建单独的镜像文件。
安装
基本用法
管理Docker守护进程
sudo systemctl start docker #运行Docker守护进程
sudo systemctl stop docker #停止Docker守护进程
sudo systemctl restart docker #重启Docker守护进程
sudo systemctl enable docker #设置Docker开机自启动
sudo systemctl status docker #查看Docker的运行状态
管理镜像
docker images #查看镜像
docker pull <镜像:标签> #拉取镜像
docker tag <旧:旧> <新:新> #修改镜像和标签,以便记忆区分
docker rmi -f <镜像:标签> #强制删除镜像
管理容器
docker ps [-a] #查看容器
docker run [选项] <使用镜像> #启动新容器
-d #让容器在后台运行
--restart always #容器始终运行
--name #容器名称
-p #端口映射
-v #绑定volume
docker rm -f <容器> #强制删除容器
docker logs -f <容器> #实时查看容器运行日志
docker exec -it <容器> [bash|sh] #进入容器
docker commit <容器> <仓库>:<标签> #把容器做成镜像
登录认证
docker login [-u 用户名 -p 密码] 私有仓库 #登录认证
cat /root/.docker/config.json #查看账号密码
echo '<账号密码的base64编码>' | base64 --decode #解密
docker logout 私有仓库 #移除认证
日志清理(/var/lib/docker)
docker system prune
docker volume prune
注意:如果数据很重要,那就手动清理
通过Dockerfile构建镜像
FROM node:14.18.2 as buildMode
ENV PROJECT_PATH=/test-project
WORKDIR ${PROJECT_PATH}
COPY . ${PROJECT_PATH}
RUN npm i
RUN npm run build
FROM nginx:1.25.1
# nginx.server.root
ENV PROJECT_PATH=/test-project
RUN mkdir ${PROJECT_PATH}
COPY --from=buildMode ${PROJECT_PATH}/build ${PROJECT_PATH}
COPY --from=buildMode ${PROJECT_PATH}/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
docker build -t <镜像名称>:<镜像版本> .
--no-cache
注意:.
表示Dockerfile文件的路径,不能忽略。
docker-compose
docker-compose是Docker官方提供的用于定义和运行多个Docker容器的开源容器编排工具,可以使用YAML文件来配置应用程序需要的所有服务,然后使用docker-compose运行命令解析YAML文件配置,创建并启动配置文件中的所有Docker服务,具有运维成本低、部署效率高等优势。
services:
web:
build:
context: . # 当前目录
dockerfile: Dockerfile # 查找名叫Dockerfile的文件作为Dockerfile
container_name: web # 容器名称
ports: # 映射端口
- 8080:80
db: # 服务名称
image: mysql:5.7 # 基础镜像
container_name: db # 容器名称
restart: always # docker启动,当前容器必启动
ports: # 映射端口
- 3306:3306
environment: # 环境变量
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: 123456
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes: # 数据卷挂载路径
- ./data:/var/lib/mysql
- ./log:/var/log/mysql/error.log
docker-compose up -d
docker-compose down
推送镜像到dockerhub
1.首先在dockerhub创建账号,并创建存储库(xfqdocker/hello-world)
2.然后将要推送的镜像通过docker tag改名为xfqdocker/hello-world:tagname
3.最后执行docker push xfqdocker/hello-world:tagname即可
.dockerignore
构建镜像时要忽略的内容
node_modules
build
dist
README.md
.gitignore
网络模式
bridge
:桥接模式,是容器的默认网络模式,挂靠在docker0网卡上,可以访问外网
host
:容器和宿主机的网络实现共享,不安全
none
:没有网络,只有本地回环地址127.0.0.1
当然也是可以自定义网络的。
ip address
docker network ls
最后
有问题欢迎指出,会进行更正。