Docker在概念上可以理解为一个虚拟机,但却不是真正意义上的虚拟机. 它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应用程序在任何环境中无缝运行。并且它还充分利用了系统的硬件环境, 和操作系统底层环境, 自己只虚拟很少的东西.
为什么使用Docker?
- DevOps开发运维一体化的核心技术
- 开发,测试,运维, 用Docker容器, 可以做到环境完全一致
安装Docker
yum install -y docker
用docker部署应用
Docker之镜像
-
虚拟机的一组静态磁盘文件
-
可以任意下载、复制、分发
- hub.docker.com
-
镜像名称,由两部分组成
- Repository:Tag
- 名称:标签
- 如果不写标签,默认标签是
latest
-
镜像的常用命令
# 下载镜像 docker pull 镜像名称 # 镜像列表 docker images # 为镜像添加新的名称 docker tag redis my-redis:v1 docker tag redis redis-tedu:v2 # 删除镜像的名称 # 删除最后一个名称时,会把镜像磁盘文件一起删除 # remove image docker rmi my-redis:v1 docker images # 导出镜像到压缩文件 docker save rabbitmq:management benwang6/cerebro:0.9.4 | gzip > a.gz # 从压缩文件导入,加载镜像 # 先删除 docker rmi rabbitmq:management benwang6/cerebro:0.9.4 # 再导入 docker load -i a.gz
Docker之容器(Docker的虚拟机)
常用命令:
# 启动容器
docker run mariadb
# 在前台启动,占用命令行
docker run redis
# 查看容器
docker ps # 运行状态的容器
docker ps -a # all
# 查看镜像中设置的默认启动命令
docker history redis
docker history mariadb
docker history rabbitmq:management
# 覆盖 CMD 设置的默认命令
docker run redis pwd
docker run redis ls -a -l
# -i 交互 -t 终端
docker run -it redis bash
exit
docker ps -a
镜像中设置默认启动命令:
CMD
CMD ["redis-server"]
# "java -jar /opt/cs/cs.jar"
CMD ["java", "-jar", "/opt/cs/cs.jar"]
ENTRYPOINT
# "java -jar /opt/cs/cs.jar"
ENTRYPOINT ["java"]
CMD ["-jar", "/opt/cs/cs.jar"]
# 覆盖ENTRYPOINT
docker run --entrypoint ls redis -a -l
-d 后台运行:
docker run -d \
redis
docker ps
docker logs 容器ID前3位
进入容器,执行容器中的命令:
docker exec -it cbc pwd
docker exec -it cbc touch a.txt
docker exec -it cbc ls -a -l
docker exec -it cbc bash
exit
docker ps
容器命名
docker run -d --name r1 \
redis
docker run -d --name r2 \
redis
docker ps
docker logs r1
docker stop r1 r2
docker start r1 r2
--restart=always 让容器可以随系统自动重启
服务器重启,或docker系统服务重启,容器默认是退出状态
docker run -d --name r3 \
--restart=always \
redis
docker ps
# 重启docker系统服务
systemctl restart docker
docker ps
--rm 容器关闭时,会被系统自动删除
启动临时容器
#查看容器中的一些默认设置
#从容器复制文件到宿主机
# redis容器启动后,容器内有哪些环境变量
docker run --rm redis env
docker cp 在容器和宿主机之间互相复制文件
# 从容器复制文件到宿主机
docker cp r3:/data/dump.rdb ~/
ls
# 从宿主机复制文件到容器
docker cp ~/ip-static r3:/data/ip
# 进入容器查看文件
docker exec -it r3 ls /data/
数据挂载:文件、文件夹、数据卷
# 启动mariadb数据库,挂载宿主机的一个文件夹存放数据文件
# -v挂载会自动创建宿主机目录
docker run -d --name mysql \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
# 挂载文件
docker run -d --name r4 \
-v /root/redis.conf:/my.conf \
redis \
redis-server /my.conf
docker rm r1 r2 r3
docker rm -f r1 r2 r3
# 清理所有停止的容器
docker container prune
docker container prune -f
# 删除所有容器
# docker ps -aq 列出所有容器的id
docker rm -f $(docker ps -aq)
# 挂载文件夹
# 组主机的文件夹会自动创建
docker run -d --name r1 \
-v /opt/my-app/:/opt/app \
redis
# 访问容器内的路径,创建文件,实际是创建到宿主机挂载的目录下
docker exec -it r1 touch /opt/app/a.txt
# 查看宿主机文件
ls /opt/my-app/
数据卷挂载
# 清理容器
docker rm -f $(docker ps -aq)
# 新建数据卷
docker volume create my-vol
# 查看数据卷列表
docker volume ls
# 查看数据卷详情
docker inspect my-vol
# 启动数据库容器,挂载my-vol数据卷
docker run -d --name mysql \
-v my-vol:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
# 查看容器的挂载详情
docker inspect mysql
# 启动新的容器,my-vol挂载到容器
docker run -d --name r1 \
-v my-vol:/opt/app/ \
redis
docker exec -it r1 touch /opt/app/a.txt
# ls 数据卷的真实路径
ls /var/lib/docker/volumes/my-vol/_data
FAQ:
1.什么是Docker镜像?
- 类似于VMware虚拟机的镜像文件,或VirtualBox虚拟机的镜像文件
- 是一组磁盘文件
- 所有的依赖项打包在一起
- Docker镜像,就像是Docker容器的源代码
- Docker镜像用来创建容器
- 可以想象成Java中的类和实例之间的关系
2.什么是Docker容器?
- 可以想象成就像是VMware的虚拟机,只是更轻量,启动更快,占资源更少。
- Docker容器包括应用程序及所有的依赖项,作为操作系统的独立进程运行。
3.什么是Docker?
Docker是一个容器化平台,它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应用程序在任何环境中无缝运行