Docker(常用命令)

Docker简介

一个项目,开发和上线两套环境,应用环境配置费时费力,而且容易出问题。为了解决这问题,所谓开发即运维,就是开发人员使用 Docker 来解决 “它在我的机器可以正常运行” 的问题,它会将运行程序的相关配置打包(打包成 一个镜像),然后直接搬移到新的机器上运行。从而保证系统稳定性,提高部署效率。

Docker的基本组成:

  • 镜像(image) :Docker镜像就好比是个模板,可以通过这个模板来创建容器服务
  • 容器(container) :独立运行一个或者一个组应用通过镜像来创建的
  • 仓库(repository) :仓库就是存放镜像的地方

Docker官网镜像搜索 : https://hub.docker.com

Docker官网:http://www.docker.com

Docker安装

Docker官方建议在Ubuntu中安装,因为 Docker 是基于Ubuntu发布的,由于很多公司的环境都使用的是 CentOS ,如果安装到 CentOS 上,需要注意Docker 要求 CentOS 系统的内核版本高于 3.10 ,需要安装 64位 CentOS7.x 以上的版本。

查看系统内核

# 系统内核版本,需要3.10以上
uname -r

卸载旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装前提

# 查看CentOS的版本,确定在CentOS7版本以上 
cat /etc/redhat-release
# 更新yum软件包索引(方便我们后续下载快些)这个通常会使用yum makecache 生成缓存,用来提升搜索安装软件的速度
yum makecache fast
# 安装gcc -- 可以没有
yum -y install gcc
yum -y install gcc- c++

安装相关插件

yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

设置Docker的镜像仓库-使用阿里源

# 使用阿里源
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学源
sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 国外镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo    

进行安装

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

# 查看源中可使用版本
 yum list docker-ce --showduplicates | sort -r
# 安装指定版本的docker
 yum install  docker-ce-20.10...el7 (这个是上面的版本号)

安装最新版本的 Docker CE

yum install docker-ce  # (快速安装)
#安装中出现下面提示, 输入 y 然后回车
或者
#安装docker相关的 docker-ce 社区版 而ee是企业版 (官网推荐的安装)
yum install docker-ce docker-ce-cli containerd.io

Docker基本命令

启动与停止Docker服务

# 查看docker版本: 
# 有客户端的版本和服务端的版本(Version)有版本号就代表安装成功
docker version  

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

# 查看服务是否自动启动(enabled是 disabled否)
systemctl list-unit-files|grep docker.service
# 开机自动启动docker:
systemctl enable docker
# 开机不自动启动docker:
systemctl disable docker

# 重写加载配置(一般设置了systemctl需要重新加载配置)
systemctl daemon-reload

# 查看docker的进程:
ps - ef|grep docker
# 查看docker概要信息:
docker info
# Docker帮助命令:
docker --help

卸载Docker服务

# 卸载前需要停止docke
systemctl stop docker 
# 卸载依赖  
yum remove docker-ce docker-ce-cli containerd.io 
或
yum remove -y docker-ce  # (快速安装的卸载)
# 删除资源  
rm -rf /var/lib/docker   # /var/lib/docker 是docker的默认工作路径!
rm -rf /var/lib/containerd

配置国内镜像加速器

1、登录阿里云找到容器服务,搜索镜像服务,找到镜像加速器

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,如果不存在则手动创建,文件加入上面的地址内容。然后重启docker服务,

#配置镜像加速器,通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.aliyuncs.com"]
}
EOF
#重载此配置文件
sudo systemctl daemon-reload
#重启 docker
sudo systemctl restart docker

镜像命令

Docker官网镜像搜索 : https://hub.docker.com

#查看所有本地主机上的镜像
docker images 

#搜索镜像
docker search 
#搜索出来的镜像就是STARS大于3000的mysql镜像
docker search mysql --filter=STARS=3000

#拉取镜像 (如果不写标签名,默认就是latest)
docker pull 镜像名:标签名

#删除镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id
#删除全部镜像
docker rmi `docker images -q`

#查看镜像/容器/数据卷所占的空间
docker system df
#会展示,type类型(分为镜像/容器/本地卷/缓存)、总数、活跃的数量、大小(MB)、对应的可伸缩性

Docker虚悬镜像是什么?

仓库名和标签都是<none>的镜像,就是虚悬镜像,我们需要删除掉。

# 查看虚悬镜像
docker image ls -f dangling=true
# 删除它们
docker image prune
# 输入y ,就可以全部删除掉

容器命令

查看容器

#查看全部容器
docker ps -a
#查看正在运行容器:
docker ps
#查看最近创建的容器:
docker ps -l
#查看停止的容器
docker ps -f status=exited

启动/停止/删除容器

#启动容器
docker start 容器id
#重启容器
docker restart 容器id 
#停止当前正在运行的容器
docker stop 容器id 
#强制停止当前容器
docker kill 容器id
#删除指定容器
docker rm 容器id 
#删除多个容器(谨慎使用)
docker rm -f ${docker ps -a -q} 

退出容器

exit #容器直接退出
ctrl +P +Q #容器不停止退出

新建容器并启动

# 语法:docker run [OPTIONS] 镜像名:标签名
# 创建容器后,马上会启动容器,并进入容器
例子:docker run -it --name=容器名 镜像名:标签名 /bin/bash
# 创建容器后,后台进行运行,并返回容器id,-d:就代表后台运行  -p 端口映射
例子:docker run -it --name=容器名 -d -p 8080:80 镜像名:标签名
容器数据卷

数据卷就是目录或者文件,目的就是数据持久化,不会因为删除容器,而删除掉挂载的数据卷。

# Docker一般挂载主机如果出现cannot open directory...  需要配置 --privileged=true
# 数据目录挂载
docker run -it -v /宿主机绝对路径目录:/容器内目录 --privileged=true  --name=容器名 镜像名
# 目录挂载只读(Read-only)权限(容器里只能看不能修改)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名

# 查看数据卷是否挂载成功,在Mounts可以看到映射文件
docker inspect 容器id
# 在“Mounts”:[{"Type:""bing","Source":"/tmp/xxx","Destination":"/tmp/xxx",...}]

# 容器之间的继承 , 首先创建出一个容器(父类容器名)
docker run -it --volumes-from 父类容器名 --privileged=true  --name=容器名 镜像名

创建守护式容器

# 创建一个守护式容器(后台运行的容器)
docker run -d --name=容器名 镜像名:标签名

登录容器

# 登录已经启动的容器方式,一般退出已启动的容器再进入该容器中
docker exec -it 容器名称|容器id /bin/bash
# 注意,此时使用exit退出容器,不在导致容器的停止,而用attach进入容器,会导致容器停止

拷贝文件

# 将宿主机文件拷贝到容器内
docker cp 要拷贝的宿主机文件或目录 容器id:容器文件或目录
# 从容器内文件拷贝到宿主机
docker cp 容器id:要拷贝的容器文件或目录(容器内的路径) 宿主机文件或目录
例子:docker cp 123dd: /tmp/a.txt /home
注意:文件拷贝 docker cp 命令 均在宿主机中操作(当前主机)

导入导出容器

#导出 (导出容器的内容作为tar归档文件)
docker export 容器id > 文件名.tar
#导入
cat 文件名.tar | docker import - 镜像用户/镜像名:版本号 
#例子:docker import - red/redis:6.0
#执行完,docker images 可查看到 red/redis 的镜像,版本号是6.0
#进行创建容器 docker run -it (上面的镜像id) /bin/bash
#此时的容器,里面的内容就是文件名.tar里的内容

常用其他命令

# 查看容器中进程信息,会跟top命令一样的效果
docker top 容器id
# 查看日志
docker logs 容器id
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志
# 查看容器内部细节
docker inspect 容器id
# 查看容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
# 查看当前docker运行状态  (查看CPU状态)
docker stats

镜像操作

镜像是通过分层来进行继承

# 提交容器成为镜像,把当前容器里的内容,打成一个镜像,方便其他人使用
docker commit -m=“描述信息” -a="作者名字" 容器id  目标镜像名:[版本号]
# 例子:
docker commit -m=“描述123” -a="yan" 7xx..容器ID tomcatNew:1.3
# 得到上面的镜像,我们可以通过该镜像进行创建容器
docker run -it --name=容器名 tomcatNew:1.3 /bin/bash

本地镜像发布到阿里云仓库

  1. 登录阿里云

  2. 找到容器镜像服务

  3. 创建命名空间
    在这里插入图片描述

  4. 创建镜像仓库

在这里插入图片描述

然后下一步,选择本地仓库,进行点击创建镜像仓库按钮。

创建完可以看到很多操作命令,可根据指令执行,可通过镜像仓库的列表页,点击管理,进行查看命令。

  1. 将本地镜像推送到阿里云镜像仓库
# 1.登录阿里云Docker Registry, 密码为开通服务时设置的密码
docker login --username=用户名 registry.cn-xxx(每个人地址不一样)
# 上面的出现succeeded,代表连接阿里云成功

# 2.标记此镜像为阿里云仓库的镜像
docker tag [镜像id] registry.cn-xxxx.xxx.com/命名空间/仓库名称:[镜像版本号]

# 3.提交 
docker push registry.cn-xxxx.xxx.com/命名空间/仓库名称:[镜像版本号]
  1. 将阿里云的镜像拉取到本地
# 1.登录阿里云Docker Registry, 密码为开通服务时设置的密码
docker login --username=用户名 registry.cn-xxx(每个人地址不一样)

# 2.进行拉取镜像
docker pull registry.cn-xxxx.xxx.com/命名空间/仓库名称:[镜像版本号]

Docker Registry

它是私有库,进行搭建docker私有库:

# 1.下载镜像 (相当于本地有一个docker hub) 
docker pull registry 

# 2.创建本地私有服务器容器
docker run -d -p 5000:5000 -v /xxx/my_registry/:/tmp/registry --privileged=true registry
# 默认仓库创建容器是/var/lib/registry目录下,我们这里指定创建在/xxx/my_registry/目录下

# 3.我们可以操作一些镜像,进行更改内容,创建出新的镜像
docker commit -m=“描述123” -a="yan" 7xx..容器ID tomcatNew:1.3
# 制作出新的镜像

# 4.我们查询私服库上有哪些镜像
curl -XGET http://IP地址:5000/v2/_catalog
# 我们会发现是空的

# 5.将新镜像tomcatNew:1.3修改私服规范的镜像:版本号,
#   最后的tomcatNew:1.3是上传到私有库Registry后自定义的镜像名字、版本号
#   IP,系统会默认主机的绑定网络地址为0.0.0.0
docker tag 镜像名称:版本号(或者镜像id:版本号) IP地址:5000/镜像名称:版本号
# 例子:docker tag tomcatNew:1.3 127.0.0.1:5000/tomcatNew:1.3

# 6.修改配置文件支持http,默认是不支持的,该文件也是配置国内镜像加速器的文件
vim /etc/docker/daemon.json
# 内容:注意:格式是json格式,是有逗号的
{
  "registry-mirrors": ["https://xxxxx.aliyuncs.com"],
  "insecure-registries": ["IP地址:5000"]
}

# 7.进行重启docker(高版本可以不用重启),重启后,registry也需要重启,保持运行状态
systemctl restart docker

# 8.push推送私服库上
docker push IP:端口符合规范的镜像名称或ID:版本号
# 例子:docker push 0.0.0.0:5000/tomcatNew:1.3

# 9.我们查询私服库上有哪些镜像,这时会发现有镜像
curl -XGET http://IP地址:5000/v2/_catalog

# 10.将私有库上的镜像,拉到本地
docker pull IP地址:5000/符合规范的镜像名称:版本号
# 例子:docker pull 0.0.0.0:5000/tomcatNew:1.3

# 11.然后我们可以运行该镜像
docker run -it --name=容器名 镜像名:标签名 /bin/bash

部署应用

部署 MySQL

# 拉取MySQL镜像
docker pull mysql:5.7

# 创建 MySQL 容器
docker run -id --name=my_mysql -p 33306:3306 --privileged=true
-v /home/mysql/conf:/etc/mysql/conf.d 
-v /home/mysql/log:/var/log/mysql 
-v /home/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=密码 mysql:5.7
# -d 后台启动 -p 端口映射 -v 卷挂载 -e 环境变量 -name 容器名字

# 新建my.cnf - 进行修改字符编码
cd /home/mysql/conf/
ls
vim my.cnf  # mysql的配置文件,可以在mysql篇章找对应的配置文件
[client]
default_character_set=utf8
...

# 重启容器
docker restart mxg_mysql

# 进入MySQL容器, 登陆MySQL
docker exec -it mxg_mysql /bin/bash

# 登录Mysql
mysql -u root -p

部署 Nginx

# 拉取镜像
docker pull nginx

# 创建容器
docker run -d --name=nginx01 -p 3344:80 nginx

# 查看本机的状况
curl localhost:3344

# 进入容器,查看容器配置文件
whereis nginx

部署 Redis

docker pull redis:6.0.8
# 启动容器,redis-server是指定配置文件进行启动
docker run -id --name=mxg_redis -p 6379:6379 --privileged=true
-v /home/redis/redis.conf:/etc/redis/redis.conf
-v /home/redis/data:/data
redis:6.0.8  redis-server /etc/redis/redis.conf
# 需要将redis的配置文件,daemonize no,设置为no

部署 tomcat

docker pull tomcat
# 创建容器
docker run -id --name=tomcat01 -p 9095:8080 -v /usr/project:/usr/local/tomcat/webapps --
privileged=true tomcat
# 步骤:--privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,
# -v 映射目录:宿主机目录:容器映射目录

部署 es+kibana

docker pull elasticsearch

# 创建容器
docker run -id --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
步骤:-e ES_JAVA_OPTS 增加内存限制64兆,最大是512兆

# 查看本机的状况
curl localhost:9200

镜像操作

提交一个镜像:

提交容器成为镜像
docker commit -m=“描述信息” -a="作者名字" 容器id 目标镜像名:[版本号]
例子:
docker commit -m=“描述” -a="yan" 7..容器ID tomcatNew:1.0

使用数据卷:

# -v  两个目录进行关联挂载
docker run -it -v 主机目录:容器内的目录

# 多个容器实现数据共享 ,创建第2个容器,引用之前创建好的容器名。
docker run --.... --volumes-form 其他容器名
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值