docker使用
创建镜像
编写dockerfile,然后在dockerfile所在目录运行docker build -t name:version
构建镜像
dockerfile格式
FROM 指定基础镜像
MAINTAINER 镜像作者信息
RUN 在镜像中要执行的命令
EXPOSE 容器向外部公开的端口
WORKID 指定容器默认工作目录
USER 切换用户,默认为root
ENTROYPOINT 容器启动时要运行的命令
ENV 设置环境变量
ADD 复制文件到镜像中
VOLUME 创建一个可以从本地主机或其它容器挂载的挂载点,一般用于存放需要保持的数据
CMD 容器启动时要运行的命令
运行镜像
运行镜像在一个容器中
docker run -d --name <容器名称> <镜像名称>
启动/停止已存在容器
docker start/stop
进入到容器并进行开发
docker exec -it <容器名称> bash
发布和获取镜像
登录公共的Docker镜像仓库docker login -u username
为你的本地镜像添加一个仓库名和标签docker tag <本地镜像名> <仓库名>:<标签>
发布镜像docker push <仓库名>:<标签>
获取镜像docker pull <仓库名>:<标签>
查看本地的镜像列表docker images
多容器通信
创建名为test网络docker network create test
启动容器时指定网络--network test
例子
创建自定义网络:docker network create mynetwork
启动数据库容器:docker run -d --name db --network mynetwork -e MYSQL_ROOT_PASSWORD=password mysql
这将在mynetwork网络上启动一个名为db的MySQL数据库容器,设置了MYSQL_ROOT_PASSWORD环境变量为"password"
启动Web服务器容器:docker run -d --name web --network mynetwork -p 80:80 nginx
这将在mynetwork网络上启动一个名为web的Nginx Web服务器容器,并将容器的80端口映射到主机的80端口
在Web服务器容器中访问数据库容器: 在Web服务器容器中,你可以使用数据库容器的名称(在此例中为db)来访问数据库
docker-compose配置文件
可以通过docker-compose配置文件docker-compose.yml来一下配置多个服务。在docker-compose.yml文件中,可以指定要创建的服务的属性,包括容器映像、环境变量、端口映射、网络设置等。通过定义这些属性,可以一次性启动和管理多个相关联的容器,从而简化了容器的部署过程
version:指定文件语法版本
services:
服务名称1
服务名称2
image:使用的镜像
volumes:文件挂载
ports:暴露端口
……
例子
version: '3'
services:
web:
image: nginx
ports:
- 80:80
networks:
- mynetwork
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=password
networks:
- mynetwork
networks:
mynetwork:
在文件所在目录运行docker-compose up
启动
查看容器运行服务docker-compose ps
停止/重启运行docker-compose stop/restart
数据备份与迁移
目录挂载
将主机文件系统中的目录挂载到Docker容器中。通过将主机上的目录挂载到容器中,可以实现容器和主机之间的文件共享和数据持久化。使用目录挂载,可以将主机上的一个目录或文件挂载到容器中的指定路径上。在容器中进行的文件操作将直接反映在主机上的文件系统中
使用-v参数或--mount参数来指定要挂载的目录或文件docker run -v /host/path:/container/path image_name
使用数据卷备份和迁移
备份数据卷:
创建一个数据卷并将其挂载到MySQL容器中:
docker volume create mysql_data
docker run -d -v mysql_data:/var/lib/mysql --name mysql_container mysql:latest
在MySQL容器中,执行以下命令在/var/lib/mysql/backup.sql中创建一个备份文件
docker exec mysql_container sh -c 'mysqldump -u root -p<password> <database_name> > /var/lib/mysql/backup.sql'
迁移数据卷:
在旧主机上,将备份文件从旧主机复制到新主机的相应位置/path/to/backup.sql:
docker cp mysql_container:/var/lib/mysql/backup.sql /path/to/backup.sql
在新主机上,创建一个新的数据卷并将其挂载到MySQL容器中:
docker volume create mysql_data
docker run -d -v mysql_data:/var/lib/mysql --name mysql_container mysql:latest
在新的MySQL容器中,将备份文件恢复到数据库中
docker exec mysql_container sh -c 'mysql -u root -p<password> <database_name> < /var/lib/mysql/backup.sql'
docker与虚拟机的异同
Docker和虚拟机都提供了隔离的运行环境,使不同的应用程序够在相互独立的环境中运行,都能在不同环境中进行部署和移植,使应用程序的迁移更加方便。
Docker容器共享主机操作系统的内核,是进程的虚拟化。Docker快速启动,资源利用率高、易于部署和管理,适用于快速构建
虚拟机则需要独立的操作系统和内核,是硬件的虚拟化。传统虚拟化技术的隔离性、安全性好