• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
自由的代价是孤独丶
博客园    首页    新随笔    联系   管理    订阅  订阅

docker

1. 什么是Docker

Docker是基于Go语言实现的云开源项目。通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。







2. Docker安装

Docker 要求运行在 CentOS 7 以上,要求系统为64位、系统内核版本为 3.10 以上。

### 查看自己的内核
[root@lihao ~]# uname -r
3.10.0-1062.12.1.el7.x86_64

2.1 安装gcc相关环境

yum -y install gcc-c++

2.2 安装docker所需软件包

yum install -y yum-utils

2.3 设置镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4 更新yum软件包索引

yum makecache fast

#如果出现 failure: repodata/repomd.xml from mirrors.aliyun.com_docker-: [Errno 256] No

#请看该网址:https://blog.csdn.net/nyasm/article/details/116704921

2.5 安装Docker CE(CE是免费版)

yum install docker-ce docker-ce-cli containerd.io

2.6 Docker启动/停止/重启/开机启动/查看状态

systemctl start docker  # 启动docker
systemctl stop docker  # 停止docker
systemctl restart docker  # 重启docker
systemctl status docker  # 查看docker状态
systemctl enable docker  # 开机启动

2.7 测试Docker

docker version    #查看docker版本

2.8 配置阿里云镜像加速(加速下载镜像,否则默认会去dockerhub网站下载镜像,速度会比较慢)

1、介绍:https://www.aliyun.com/product/acr
2、注册一个属于自己的阿里云账户(可复用淘宝账号)
3、进入管理控制台设置密码,开通
4、查看镜像加速器自己的


2.9 配置镜像加速

# sudo mkdir -p /etc/docker

# cd /etc/docker

# vim daemon.json
{
 "registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
}

# sudo systemctl daemon-reload

# sudo systemctl restart docker






3. Docker必知概念

3.1 什么是镜像(image)

Docker 镜像就是一个只读的模板。

镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象!

镜像里面包含了该容器运行所需的环境、配置、系统函数库等。Docker会在运行镜像时创建一个隔离环境,称为容器。




3.2 什么是容器(container)

Docker 利用容器独立运行的一个或一组应用。

容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。




3.3 什么是仓库(repository)

仓库 是集中存放镜像文件的场所。







4. Docker常用命令

4.1 帮助命令

docker version  # 显示 Docker 版本信息。
docker info     # 显示 Docker 系统信息,包括镜像和容器数。。
docker --help   # 帮助
docker images --help






4.2 镜像命令

  1. docker images
列出本地主机上的镜像
[root@kuangshen ~]# docker images
REPOSITORY     TAG         IMAGE ID           CREATED             SIZE
hello-world     latest       bf756fb1ae65     4 months ago        13.3kB

属性释义:

属性 意义
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小

可选项:

可选项 意义
-a 列出本地所有镜像,包括那些被标记为 或者 的镜像。
不加a 只会显示本地主机上的活跃镜像。也就是没有被标记为 或者 的镜像
-q 只显示镜像id
--digests 显示镜像的摘要信息



  1. docker search
搜索镜像
[root@kuangshen ~]# docker search mysql
NAME    DESCRIPTION                                    STARS(点赞)    OFFICIAL(是否官方)   
mysql   MySQL is a widely used, open-source relation…  9484           [OK]        



  1. docker pull
下载镜像
[root@kuangshen ~]# docker pull mysql

# docker pull 镜像名称:版本
[root@kuangshen ~]# docker pull mysql:5.7

注意:若不指定tag,默认是latest(最新)




  1. docker rmi
删除镜像
docker rmi -f 镜像id                      # 删除单个
docker rmi -f 镜像名:tag  镜像名:tag       # 删除多个空格隔开
docker rmi -f $(docker images -qa)        # 删除全部

注意:删除镜像 -f 表示强制【若不加 -f 也可以删除,但是如果该镜像正在运行,会提示因为正在运行,所以不可删除】







4.3 容器命令

1.docker create

新建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]   # 新建容器
   
# 如:要创建一个名为mycontainer的容器,使用tomcat的镜像,并将容器内部的8080端口映射到主机的8080端口
docker create --name mycontainer -p 8080:80 tomcat



  1. docker run
docker run [OPTIONS] IMAGE [COMMAND][ARG...]   # 新建容器并启动

OPTIONS常用参数说明:

参数 说明
--name 给容器指定一个名字
-d 后台方式运行容器,并返回容器的id!
-i 以交互模式运行容器,通过和 -t 一起使用
-t 给容器重新分配一个伪终端,通常和 -i 一起使用【即:容器启动后会进入其内部命令行】
-e 指定环境变量
-p(小写) 随机端口映射
-P(大写) 指定端口映射

如:docker run -d --name tomcat1 -p 8088(主机[对外]):8080(容器) tomcat

注意:若你运行时,同时要以 -i -t 交互模式进入容器时,需要注意,你可能需要执行/bin/bash命令,否则你进去之后就是一片空白,什么命令你都执行不了。所以我们一般以交互模式进入容器时,在执行命令的时候在后面加上 /bin/bash ,表示进入容器并开启/bin/bash。

交互模式进入容器
[root@kuangshen ~]# docker run -it centos /bin/bash



  1. 进入正在运行的容器
docker exec -it 容器id /bin/bash    #-it:表示在容器中打开新的终端



  1. exit
退出容器
[root@dc8f24dd06d0 /]# exit



  1. 退出容器[不让其停止运行]
    ctrl+P+Q   # 容器不停止退出 注意按键顺序 P按了之后再按Q



  1. docker ps
列举出正在运行的容器
docker ps [OPTIONS]  # 列举出正在运行的容器

常用参数说明:

参数 说明
-a 列出当前所有正在运行的容器 + 历史运行过的容器
-l 显示最近创建的容器
-n=? 显示最近n个创建的容器
-q 静默模式,只显示容器编号



  1. 启动停止容器
docker start (容器id or 容器名)     # 启动容器
docker restart (容器id or 容器名)    # 重启容器
docker stop (容器id or 容器名)     # 停止容器     # 停止所有容器docker stop $(docker ps -a -q)
docker kill (容器id or 容器名)     # 强制停止容器



  1. docker rm
-f 强制:强制删除一个正在运行的容器可能会导致数据丢失或者其他问题,建议先停止再删除
docker rm 容器id                   # 删除指定容器
docker rm -f $(docker ps -a -q)   # 强制删除所有容器






5. 开放防火墙端口

firewall-cmd --list-ports  # 查看防火墙开放的端口号 
netstat -ntlp  #查看当前所有tcp端口号


firewall-cmd --zone=public --add-port=8080/tcp --permanent  # 开放端口  --zone #作用域  --add-port=1935/tcp #添加端口,格式为:端口/通讯协议  --permanent #永久生效,没有此参数重启后失效

firewall-cmd --permanent --zone=public --remove-port=8080/tcp  # 关闭端口

systemctl start/stop/disable/enable firewalld  # 开启/关闭/禁用/启用防火墙   本质是操作的防火墙服务

firewall-cmd --reload  # 重启防火墙

systemctl status firewalld  # 查看防火墙状态

netstat -naop|grep 端口号  # 查看端口占用情况    netstat -anp | grep mysqld  #查询mysql端口号






6. 其他命令

#1. 查看日志=============================================
docker logs -f -t --tail 容器id

# --since 指定输出日志开始时间,即只输出指定日期后的日志
# --tail 数字 显示多少条!
# -t 显示时间戳 
# -f 打印最新的日志
[root@kuangshen ~]# docker logs -tf --tail 10 c8530dbbe3b4
2020-05-11T08:46:40.656901941Z kuangshen
2020-05-11T08:46:41.658765018Z kuangshen
2020-05-11T08:46:42.661015375Z kuangshen






#2. 查看容器中运行的进程=============================================
docker top 容器id

# 测试
[root@kuangshen ~]# docker top c8530dbbe3b4
UID   PID   PPID     C   STIME   TTY  TIME       CMD
root   27437  27421  0   16:43    ?    00:00:00  /bin/sh -c ....






#3. 查看容器/镜像的元数据(详细信息)=============================================
docker inspect 容器id






#4. 进入正在运行的容器=============================================
docker exec -it 容器id /bin/bash  #-it:在容器中打开新的终端,并且可以启动新的进程【/bin/bash不能少】这个命令最常用,下面那个不怎么用!!!

或者

docker attach 容器id              #直接进入容器启动命令的终端,不会启动新的进程。进去之后好像无法操作!!!!







#5. 文件复制[从容器内拷贝文件到主机上,该命令一定要在宿主机执行]=============================================
docker cp 容器id:容器内路径 主机路径

# 从主机上拷贝文件到容器内
docker cp 主机路径 容器id:容器内路径

# 测试
# 容器内执行,创建一个文件测试
[root@c8530dbbe3b4 /]# cd /home
[root@c8530dbbe3b4 home]# touch f1
[root@c8530dbbe3b4 home]# ls
f1
[root@c8530dbbe3b4 home]# exit
exit
# linux复制查看,是否复制成功
[root@kuangshen ~]# docker cp c8530dbbe3b4:/home/f1 /home
[root@kuangshen ~]# cd /home
[root@kuangshen home]# ls
f1



5. 容器数据卷

数据卷:Docker容器产生的数据,当容器删除后,该数据也就没了。数据卷就是来解决这个问题的。



好处1:为了能将docker容器产生的数据保存下来,我们就要用到数据卷技术,简单来说,数据卷就好比redis中的持久化性质一样。

好处2:数据卷可以在容器之间共享和重用。

  比如你要启动多个项目集群,但是每个都用一些公共的数据需要修改,  那么就可以将这些数据作为数据卷放在宿主机上。  通过修改宿主机上的数据从而达到修改各个容器的数据。
  因为在容器里面,通常大部分容器并没有vim命令。因为容器内存很小,存的就是该容器相关的命令,如vim、cat等属于linux命令。
  如果遇到需要频繁修改的文件,  只有在宿主机改了再复制粘贴到容器里面。就很麻烦,而且如果多个容器都要改某个文件,很麻烦
  将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,对容器内的操作也会影响宿主机。
  当容器被删除时,宿主机的内容也不会被删除。多个容器挂载同一个目录,当其中一个容器被删除,其他容器也不会受影响。



5.1 数据卷常用命令

image




5.2 创建数据卷

方式一:针对某个文件进行数据卷创建

# 命令
docker run -it -v 数据卷名称:容器内目录 镜像名/镜像id

[root@kuangshen ~]# docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html ngix

# 查看数据卷详情
docker volume inspet 数据卷名
[root@kuangshen ~]# docker volume inspect html



方式二:针对某个文件目录进行数据卷创建

# 命令
docker run -it -v 本地目录:容器内目录 镜像名/镜像id

[root@kuangshen ~]# docker run -d --name nginx -p 80:80 -v /var/lib/ngix:/usr/share/nginx ngix

注意:本地目录比如以“/”或“./”开头,如果直接以名称开头,则会被识别会针对某个文件做数据卷,而不是目录。





posted @ 2022-03-04 18:32   不将就鸭  阅读(77)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3