Docker架构及常用的命令

一、初识Docker

1、 docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

2、镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。

3、DockerHub 镜像托管平台

DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry

4、Docker架构

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令

二、CentOS安装Docker及启动

1、安装yum工具

powershell 复制代码
yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

2、如果之前安装过旧版本的Docker,可以使用下面命令卸载:

powershell 复制代码
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

3、设置docker本地镜像源

powershell 复制代码
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
powershell 复制代码
yum makecache fast

4、开始安装docker-ce

docker-ce为社区免费版本

powershell 复制代码
yum install -y docker-ce

Docker应用需要用到各种端口,如果只是练习建议直接关闭防火墙!否则就去释放对应的端口就行

5、关闭防火墙

  • 关闭 systemctl stop firewalld
  • 禁止开机启动防火墙 systemctl disable firewalld

6、启动Docker服务

  • systemctl start docker # 启动docker服务
  • systemctl stop docker # 停止docker服务
  • systemctl restart docker # 重启docker服务
  • systemctl enable docker #开机自启

使用docker -v查询docker版本,systemctl status docker查询启动状态

三、镜像基本操作及命令

1、镜像名称组成规则

镜像名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像。例如mysql:5.7mysql是repository ,5.7则是tag

2、镜像操作命令

常见的镜像操作命令如图:

2.1 查看镜像(docker images)

例如:docker images

2.2 删除镜像(docker rmi)

例如:docker rmi nginx:latest

2.3 拉取镜像(docker pull)

例如:docker pull nginx

需求:从DockerHub中拉取一个nginx镜像并查看

1)首先去镜像仓库搜索nginx镜像,建议找官方的)

2)点进去详情,复制docker pull nginx命令

2.4 保存镜像(docker save)

例如:docker save -o nginx.tar nginx:latest 将nginx:latest保存为nginx.tar

2.5 导入镜像(docker load)

例如:docker load -i nginx.tar

四、容器基本操作及命令

1、容器操作命令

容器操作的命令如图:

容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源
1.1 创建并运行一个容器(docker run)

例如: docker run --name mn -p 8080:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mn
  • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx
1.2 让运行的容器暂停(docker pause)

例如:docker pause mn

1.3 让容器从暂停状态恢复运行(docker unpause)

例如:docker unpause mn

1.4 停止运行的容器(docker stop)

例如:docker stop mn

1.5 让停止的容器再次运行(docker start)

例如:docker start mn

1.6 删除容器(docker rm)

例如:docker rm mn,如果该容器未处于暂停的状态下删除,则会失败。可使用 docker rm -f mn 强制删除

1.7 查看运行的容器及状态(docker ps)

仅查看运行的容器,如想查全部的容器可用 docker ps -a

1.8 进入某个容器(docker exec)

docker exec -it mn bash 命令解读:

  • docker exec :进入容器内部,执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • mn :要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

2、常用的容器基本创建及运行命令

Nginx

docker run --name mn -p 8081:80 -d nginx
命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口,也就是说用户可以通过主机名+8081访问到容器的nginx
  • -d:后台运行容器
  • nginx:镜像名称
Redis

docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mr
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口,也就是说用户可以通过主机名+6379访问到容器的redis
  • -d:后台运行容器
  • redis:镜像名称
  • -redis-server --appendonly yes 在容器执行redis-server启动命令,并打开redis持久化配置

五、数据卷(容器数据管理)及相关操作命令

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。之前进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了

1、数据卷操作命令

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume
1.1 创建数据卷(docker volume create)

例如:docker volume create html

1.2 查看数据卷详细信息(docker volume inspect)

例如:docker volume inspect html

1.3 列出所有的数据卷(docker volume ls)

例如:docker volume ls

1.4 删除未使用的数据卷(docker volume prune)

例如:docker volume prune

1.5 删除一个或多个指定的数据卷(docker volume rm)

例如:docker volume rm

2、本地目录挂载和数据卷挂载

docker run的命令中通过 -v 参数挂载文件或目录到容器中

2.1 数据卷挂载

需求:创建一个nginx容器,通过挂载的方式修改容器内的html目录内的index.html内容

docker run --name mn -v html:/usr/share/nginx/html -p 8000:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mn
  • -v html:/usr/share/nginx/html :把html数据卷挂载到容器内的 /usr/share/nginx/html 这个目录中,如果没有html挂载卷将会自动创建
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称

② 进入html数据卷所在位置,并修改HTML内容

  1. 查看html数据卷的位置 docker volume inspect html
  2. 进入该目录 cd /var/lib/docker/volumes/html/_data
  3. 修改文件 vi index.html
  4. 浏览器访问 主机:8000
2.2 本地目录挂载

需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

①创建目录/tmp/mysql/data

②创建目录/tmp/mysql/conf,并且在/tmp/mysql/conf创建一个hmy.cnf文件内容为:

mysqld\] skip-name-resolve character_set_server=utf8 datadir=/var/lib/mysql server-id=1000

挂载/tmp/mysql/data到mysql容器内数据存储目录,

挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件,

设置MySQL密码

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 33060:3306
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
-v /tmp/mysql/data:/var/lib/mysql
-d mysql:5.7.25

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mysql
  • -e MYSQL_ROOT_PASSWORD=123456 : 设置mysql 的root密码为123456
  • -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf : 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件(这里的hmy.cnf为自己需要更新mysql配置)
  • -v /tmp/mysql/data:/var/lib/mysql : 挂载/tmp/mysql/data数据到mysql容器
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • mysql:5.7.25:镜像名称

总结:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录

    由docker来管理目录,但是目录较深,不好找

  • 直接目录挂载模式:宿主机目录 ---> 容器内目录

    耦合度高,需要我们自己管理目录,不过目录容易寻找查看

  • 努力学习,持续补充更新中,多多指教~~

相关推荐
xiaok1 小时前
docker desktop拉取镜像失败
docker
Aisaka_Taiga2 小时前
Docker拉取官方镜像源
docker
玄辰星君2 小时前
【在 macOS 系统上使用 Docker 启动 Kafka 的完整指南】
macos·docker·kafka
mCell11 小时前
Docker 进阶教程
运维·docker·容器
mCell11 小时前
Docker 入门教程
运维·docker·操作系统
梓沂12 小时前
centos7安装java mysql redis nginx
centos
深耕云原生13 小时前
Kubernetes 深入浅出系列 | 容器剖析之容器安全
安全·容器·kubernetes
2301_7736386317 小时前
Kubernetes部署MySQL主从复制
mysql·容器·kubernetes
kong@react1 天前
docker部署spring boot,安装jdk17、maven3.8.8详细步骤
java·spring boot·docker
hhzz1 天前
Kubernetes 的20 个核心命令分类详解
云原生·容器·kubernetes