应用容器引擎Docker

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是一个容器化平台,它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应用程序在任何环境中无缝运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值