Docker入门

虚拟化之docker 

linuxdocker安装官方地址:https://docs.docker.com/engine/install/centos/

docker安装操作:

环境:

#内核 
[root@test2 etc]# uname -r 
3.10.0-1127.18.2.el7.x86_64 #参数 [root@test2 etc]# cat /etc/os-release
NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装:

#1.卸载旧版本
 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 #阿里源    
#更新yum软件包索引
yum makecache fast    
#4.安装docker
yum install docker-ce docker-ce-cli containerd.io
#5.启动docker
systemctl start docker #
6.docker version
[root@test2 ~]# docker version
Client: Docker Engine - Community Version:           19.03.12 API version:       1.40 Go version:       go1.13.10 Git commit:       48a66213fe Built:             Mon Jun 22 15:46:54 2020 OS/Arch:           linux/amd64 Experimental:      false Server: Docker Engine - Community Engine: Version:          19.03.12 API version:      1.40 (minimum version 1.12) Go version:       go1.13.10 Git commit:       48a66213fe Built:           Mon Jun 22 15:45:28 2020 OS/Arch:         linux/amd64 Experimental:     false containerd: Version:          1.2.13 GitCommit:       7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version:          1.0.0-rc10 GitCommit:       dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version:          0.18.0 GitCommit:       fec3683 #7.卸载
yum remove docker-ce docker-ce-cli containerd.io

阿里镜像加速

#创建文件
sudo
mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {  
  "registry-mirrors": ["https://3tcts5g3.mirror.aliyuncs.com"]
}
EOF

#启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker

 

底层原理

docker是怎么工作的?

docker是一个cs结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问

dockerServer 接受到docker-Client 的指令,会执行这个命令

 

 

 

docker为什么比vm块?

1.docker有着比虚拟机更少的抽象层。

2.docker 利用的是宿主机的内核,vm 需要是 Guest OS。

 所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机加载Guest OS,分钟级别的,而docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级别。

 

 

docker常用命令

命令地址doc:https://docs.docker.com/registry/spec/api/

镜像仓库hub:https://hub.docker.com/search?q=tomcat&type=image

镜像命令:

镜像命令:
[root@test2 ~]# docker images 
REPOSITORY  TAG                 IMAGE ID            CREATED             SIZE
#解释
REPOSITORY:镜像源
TAG:标签
IMAGE ID:镜像的id
CREATED:创建的时间
SIZE:镜像的大小



#搜索镜像
[root@test2 ~]# docker serach mysql

#下载镜像
[root@test2 ~]# docker pull mysql
#指定版本
[root@test2 ~]# docker pull mysql:5.7

#删除镜像
[root@test2 ~]# docker rmi -f +id/name
[root@test2 ~]# docker rmi -f $(docker images -qa)  #删除所有
```

 

容器命令:

docker run [可选参数] iamge
# 参数说明
--name        容器名字
-d            后台方式运行
-it           使用交互方式运行,进入容器查看内容
-p            指定容器的端口
-P            随机指定端口
-p:     -p ip:主机端口:容器端口     -p 主机端口:容器端口(常用)     -p 容器端口 容器端口

docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正则运行的容器+历史运行过的容器
-n # 显示最近创建过的容器
-q # 只显示容器的编号

 

退出容器

exit # 直接容器停止并退出
ctrl + p + q # 容器不停止推出

 

删除容器

docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,强制删除rm -f

docker rm -f $(docker ps -aq) # 删除所有容器

 

docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止当前命令

 

 

常用其他命令

后台启动容器
# docker run -d 镜像名 [root@test2 ~]# docker run -d centos #问题: docker ps 发现 centos 停止了 docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止


查看日志

# 显示日志
docker logs
-- tf # 显示日志
--tail number # 要显示日志条数

[root@test2 ~]# docker logs -tf --tail 10 b2f0ec7d634d  #容器id

 

查看容器中进程信息

docker top 容器id

 

查看镜像元数据

docker inspect 容器 id

 

进入当前正在运行的容器

# 方式一:
docker exec -it 容器id /bin/bash  #(bashshell)

# 方式二:
docker attach 容器id

# docker exec 进入容器后开启一个新的终端,可以在里面操作
# dicker attach 进入容器正在执行的终端,不会启动进度进程

 

从容器内拷贝文件到主机上

# 进入容器
[root@test2 ~]# docker run -it centos /bin/bash
# 创建文件
[root@97aba928b05f home]# touch zz.linux
# cp测试
[root@test2 ~]# docker cp 97aba928b05f:/home/zz.linux    /root
# 产看
[root@test2 ~]# ls
anaconda-ks.cfg test zz.linux

# 拷贝是一个手动过程,未来使用 -v 卷的技术,可以实现自动同步。

 

 

 

docker镜像

镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含 运行一个软件所需要的所有内容,包括代码,运行时,库,环境变量和配置文件。

UnionFS(联合文件系统)。

如何得到镜像:
从远处仓库下载 ,朋友拷贝, 自己制作一个镜像Dockerfile。

文件联合系统:

 

 镜像加载原理:

 

 

 

commit镜像

docker commit 提交容器成为一个新的副本

# 命令和git相似
docker commit -m=“提交的描述信息“ -a=”作者“ 容器id 目标镜像名:[TAG]

实战测试:

# 1,启动一个默认的tomcat

# 2,发现默认tomcat 是没有webapps应用,镜像原因,官方镜像默认webapps下没有文件

# 3,自己添加webapps基本文件并做成镜像

[root@test2 ~]# docker commit -a="zz" -m="add app" 79e252d4196c tomcat02:1.0
sha256:8a93171baa142dd426ead3657fda7b48e224cc247a039111516c74bcaa750759
[root@test2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 8a93171baa14 23 seconds ago 652MB
tomcat latest 2ae23eb477aa 2 weeks ago 647MB

 

结论:

commit 就相当于vm中的快照。

恭喜你入门了!

 

posted @ 2020-08-27 11:19  zzbk  阅读(155)  评论(1)    收藏  举报