Docker学习笔记(一)——基本使用

为什么要学习Docker?

在没有Docker的情况下,工作的流程为开发将代码打包后,交给运维人员进行部署,这时候就会出现问题。在本地电脑上运行的好好的,但是搬到服务器上就运行不起来,这是因为服务器的环境与本地的环境可能会有不一样的地方,而且现在工作中都会需要集群,如果要对多台服务器配置环境是一个很繁琐的事情,这时候就需要用到Docker。

Docker的主要功能

他会将我们开发应用与环境一起打包成一个镜像,部署的时候可以一同部署到服务器上,让部署服务器,配置服务器环境变得十分简单。而且多个镜像之间是互相隔离的,并不会互相影响,让服务器的稳定性与性能也大大提升。

  • 无Docker的时候是多个应用共用一个环境
  • 有Docker的时候可以单个应用单个环境

Docker与传统虚拟机的不同点

传统虚拟机:虚拟一条硬件,运行一个完整的操作系统,很笨重

Docker容器:运行在宿主机(实体机)的内核中,没有虚拟硬件,很轻便,每个容器互不影响

总的来说使用Docker可以让我们实现应用更快速的交付及部署。

Docker中的基本概念

镜像:docker镜像相当于一个模板,也是我们真实存在的内容以及运行环境,相当于java中的实体类。

容器:docker容器是一个应用,我们通过docker镜像来创建的,相当于在java中new了一个对象。

仓库:相当于git,用来存放镜像的地方。

Docker安装

需要在linux环境下,我个人买的腾讯云的服务器,用的是CentOS 7的环境

我们安装docker前需要查看一下系统的内核版本与操作系统版本

#查询系统内核版本  --需要3.10以上的版本
uname -r

#查询系统版本  --CentOS版本需要7以上
cat /etc/os-release  

查询以后没有问题就可以安装了

1.先卸载旧的docker,如果确认没有则跳过

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

2.下载需要用到的安装包

yum install -y yum-utils

3.设置镜像的仓库

#国外地址很慢
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo 

#国内阿里云地址
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

4.更新软件包索引

yum makecache fast

5.安装docker引擎

# 安装最新版本
yum install docker-ce docker-ce-cli containerd.io

# 安装指定版本
yum install docker-ce- docker-ce-cli- containerd.io

6.查看是否安装成功(如果无反应则先启动后查看)

docker version

7.启动docker

systemctl start docker

8.运行helloworld镜像进行测试

docker run hello-world

9.查看已下载的本地镜像

docker images

10.删除docker

# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 删除资源
rm -rf /var/lib/docker --docker的默认工作路径
rm -rf /var/lib/containerd

阿里云加速

如果是阿里云服务器的话,则可以进入页面找到产品与服务中的容器镜像服务里面就有镜像加速器,进行配置后就可以加快镜像的下载速度。

Docker常用命令

帮助文档地址:docker帮助文档地址

# 查看docker版本
docker version

# 查看更加详细的docker信息
docker info

# 帮助命令
docker --help

镜像命令

# 查看镜像列表  -a 列出所有镜像;-q 只显示镜像id;    
docker images

# 搜索docker镜像
docker search 镜像名

#下载镜像 不写 tag 默认下载最新版 latest
docker pull 镜像名:tag

#删除镜像   -f 删除全部
docker rmi -f 镜像id   #根据镜像id删除
docker rmi -f 镜像id 镜像id 镜像id    #使用空格分隔删除多个镜像
docker rmi -f $(docker images -aq)    #传镜像id作为参数全部删除

# 根据镜像ID复制一个镜像,并设置镜像名称与版本号
docker tag 源镜像ID 镜像名称:版本号

容器命令

# 下载一个centOS镜像用来测试学习
docker pull centos

# 启动一个镜像 --name='myName' 给容器设置一个名字,用来区分容器
# -d 后台方式运行;如果我们后台方式运行,但是容器内无服务,容器会自行关闭
#-it 交互方式运行,可以进入容器查看,需要指定控制台,一般为 /bin/bash;
# -p(小写) 指定容器端口,常用(主机端口:容器端口),可(ip:主机端口:容器端口)
# -P(大写)随机端口;
# -v将容器内目录与主机目录进行挂载(数据共享),主机目录:容器内目录
# 主机目录可为/开头的绝对地址,也可用字符串表示与主机内docker文件/volumes/字符串文件夹关联
# -v匿名挂载只指定容器内目录,默认与主机内docker文件夹下volumes/容器ID的文件夹进行关联
# -v挂载后可加:ro或rw,主机目录:容器内目录:ro
# ro表示只读,挂载的目录在容器内不允许修改,只能在主机上修改。rw(默认)表示读写,表示容器内可修改
# -e为容器添加配置,例如JVM配置,Mysql配置等
docker run 可选参数 镜像id

# 停止容器并退出容器,回到主机
exit

# 不停止容器并退出容器,回到主机
ctrl+p+q

# 列出正在运行的容器  -a 查看正运行的容器+曾经运行过的容器;-n=? 显示显示的容器个数;
# -q 只显示容器id
docker ps

#删除容器  -f 可以删除正在运行的容器
docker rm 容器id   #不能删除正在运行的容器
docker rm 容器id 容器id 容器id  #根据空格分隔容器id进行多个容器删除
docker rm -f $(docker ps -aq)  #删除全部容器
docker ps -a -q|xargs docker rm  #删除全部容器

# 启动容器(run是指定镜像,生成容器并启动;start是启动一个曾经生成过的容器)
docker start 容器id 

# 重启容器
docker restart 容器id 

# 停止当前正在运行的容器
docker stop 容器id

# 强行停止容器(停止报错时使用)
docker kill 容器id

# 进入当前正在运行的容器(开启一个新的命令行)
docker exec -it 容器id /bin/bash

# 进入当前正在运行的容器(进入正在执行的命令行)
docker attach 容器id

# 容器内拷贝文件到主机,手动方式,后期可用容器数据卷方式自动同步
docker cp 容器id:容器内文件路径 主机内路径

# 查看docker容器消耗的cpu
docker stats 容器id

# 自己修改过的容器提交成一个镜像
# -m="提交的描述信息";-a="作者"
#
docker commit 容器id 自定义镜像名:自定义版本

# 查看此容器创建运行过的命令
docker history 容器id

查看日志命令

# 查看日志 -f 格式化参数;-t 显示时间戳
docker logs 可选参数 容器id

# 新容器可能没有日志,自己编写一段shell脚本
# 内容为每隔1秒钟循环打印字符串
docker run -d 镜像名 /bin/sh -c "while true; do echo helloWorld; sleep 1; done"

# 查看容器内进程信息
docker top 容器id

# 查看容器的元数据
docker inspect 容器id

# 查看容器的数据卷列表
docker volume ls

# 查看此容器的数据卷挂载信息
docker volume inspect 容器id

我这里的内容完全是同步于狂神说java的教学视频,有兴趣的同学也可以直接看视频,这里只用作我简单的学习笔记记录

狂神说docker

下一篇请戳↓

Docker学习笔记(二)——容器部署

你可能感兴趣的:(docker,docker,运维)