Docker功能简单学习及使用

本文介绍了Docker的核心概念,包括其作为快速部署工具的优势,镜像与容器的工作原理,以及如何使用`dockerrun`命令、数据卷和DockerFile来管理和创建自定义镜像。此外,还讨论了网络配置和docker-compose在项目部署中的应用。
摘要由CSDN通过智能技术生成

Docker是什么

Docker是一个快速构建,运行,管理应用的工具

传统基于linux安装程序较为复杂繁琐,使用docker可以快速的进行项目部署和管理

镜像与容器

Docker进行安装应用时,会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包括应用所运行的环境,配置,系统函数库,Docker在运行景象时会创建一个隔离环境,称为容器(container)

只要安装好了docker,docker的镜像能够忽略操作系统的差异直接进行部署运行,因为所有跟系统,环境相关的部分,docker镜像中都是包含的

不同的容器之间是相互隔离的,不会相互产生影响,也不会因为需求不同的环境出现问题

Docker的基本使用

docker run命令

docker run -d \ #
    --name mysql \
    -p 3306:3306 \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=ctrl \
    mysql

通过这样一个命令就能实现mysql的下载直接到运行

命令解读

docker run -d \ #
    --name mysql \
    -p 3306:3306 \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=ctrl \
    mysql
  • docker run:创建并运行一个容器,-d让容器在后台运行
  • --name : 为容器起名,必须唯一
  • -p 3306:3306:设置端口映射 前者为宿主机端口,后者为容器内端口
  • -e KEY=Value : 设置环境变量,具体参数可以查看镜像官方文档
  • mysql : 指定运行的镜像名
    • 镜像名一般由两部分组成:[repository]:[tag]
    • repository为镜像名
    • tag为镜像版本
    • 如果不写名称,默认为最新版本

关于镜像和容器常用指令

docker save -o nginx.tar nginx

将镜像保存为其他文件

-o 想要得到的文件名 镜像名

docker load -i nginx.tar

将其他类型文件加载为镜像

-i 想要加载的文件名

docker rmi 镜像名

移除镜像

docker rm 容器名

移除容器

docker exec 容器名

进入容器

docker ps --format 格式参数

可以进行简化

查看容器

给常用Docker命令起别名,方便我们访问:

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

然后,执行命令使别名生效

source /root/.bashrc

数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁

因为容器是对外隔离的,想要修改容器内文件需要进入到容器内部,但容器内的环境和函数库是精简到极致的,所以操作不方便。

使用数据卷与主机文件系统的目录进行映射,然后再使数据卷与容器内部的文件目录进行挂载

docker就实现了宿主机目录和容器内目录的双向绑定,在其中一侧所进行的操作都会在另一侧映射出来

通过数据卷作为媒介完成挂载

数据卷挂载,在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载

当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

如果创建容器时没有完成数据卷挂载,就无法再进行挂载了

基于本地目录直接挂载

容器的挂载还有第二种方式,即基于本地目录直接挂载

语法与数据卷挂载类似,区别在于-v参数之后不写数据卷,直接写本地目录即可

自定义镜像

日常开发中,不仅仅需要使用Docker官方提供的镜像,还有可能会用到docker官方没有提供的镜像,这个时候就需要我们自己自定义镜像了

重新介绍一遍,镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。

构建镜像的过程其实就是把上述文件打包的过程。

镜像是分为很多层的,比如最底层的基础镜像,就是应用依赖的系统函数库,环境,配置,文件;最顶层的入口层,镜像运行入口,一般是程序启动的脚本和参数;中间添加安装包,依赖,配置等每次操作也会形成新的一层。

制作镜像就是将这些层分别压缩打包

你可以观察到,在从docker官方拉取镜像的时候,如果本地已经有了另一个镜像需要的基础镜像,会直接跳过这一层

DockerFile

DockerFile就是一个文本文件,其中包含指令,用于说明在构建镜像的过程中需要进行什么样的操作

以下为常见指令

FROM openjdk:11.0-jre-buster
COPY docker-demo.jar /app.jar
ENTRPOINT ["java","-jar","/app.jar"]

当编写好了DockerFile,可以用以下命令来构建镜像

docker build -t myImage:1.0 .
  • -t: 是给镜像起名,格式依然是respository:tag的格式,不指定tag时,默认为latest
  • . : 是指定Dockerfile所在目录,如果就在当前目录,则指定为“.”

网络

默认情况下,所有容器都是以bridge方式连接到docker的一个虚拟网桥上的

但是,这种情况下,随着容器的开启和关闭,容器被分配到的ip也是变化的,如果想让不同容器通过ip进行通信不太可行,需要用到自定义网络

docker compose

在日常开发中,我们在进行项目部署的时候,基本上都会同时用多个docker容器,比如比较经典的数据库+nginx+项目本体,而一个一个手动部署,启动过于繁琐,所以我们需要用到docker compose

使用docker 查看镜像无权限问题

报错:

[yichen@bogon ~]$ docker images

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied

解决命令:

sudo chown root:docker /var/run/docker.sock # 修改docker.sock权限为root:docker

sudo groupadd docker # 添加docker用户组

sudo gpasswd -a $USER docker # 将当前用户添加至docker用户组

newgrp docker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值