Docker入门

Docker概念及原理

什么是Docker容器?

从“容器”两字的字面意思来看,容器是用于容纳物品的基本装置。那么Dokcer容器技术又是什么呢?容器技术是一种沙盒技术,主要目的是为了将应用程序运行其中,与外界隔离并且方便移植到其它机器上。简单来说就是一个容纳应用的箱子,箱子中装有应用程序运行环境、应用程序运行依赖组件、程序代码及配置文件等等。

Docker的技术底座!

名称空间(Namespace)、控制组(Cgroups)、联合文件系统(UnionFS)三大技术支撑了Docker技术的实现。

Namespace

Namespace是由Linux内核提供的,是用于进程间资源隔离的技术。Linux提供了多种namespace,(如User、Mount、Network、UTS、IPC、PID)用于对多种不同资源进行隔离。容器的实质是进程,但是与直接运行在服务器上的进程不同,容器进程运行在自己独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,以及自己的用户ID空间。

cgroups

Cgroups是namespace的一种,用于实现对容器资源统计和隔离。主要用到的cgroups子系统有:cpu、blkio、device、freezer、memory,实际上Docker使用了很多的Linux隔离功能,让容器有种错觉感觉自己处于一个独立的运行空间。

UnionFS

UnionFS将多个物理位置不同的文件目录联合起来,挂载到某一目录下,形成一个抽象的文件系统。Docker中用到的是AUFS,AUFS是UnionFS的升级版,它有更佳性能和效率。AUFS是Docker镜像分层技术的基础。

Docker架构

Docker主要由image(镜像)、container(容器)、registry(远程仓库)、client(客户端)、hosts(主机)等几部分组成
请添加图片描述

Docker安装

使用脚本安装

1.使用官方脚本安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.使用国内daocloud安装脚本安装(推荐)

curl -sSL https://get.daocloud.io/docker | sh
手动安装

卸载旧版本

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

安装依赖软件及配置存储库

 sudo yum install -y yum-utils
 sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker引擎

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

也可指定版本号安装

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动docker

systemctl enable docker --now

Docker镜像常用操作命令

命令描述
docker image history <imagename/imageid>查看镜像历史记录
docker image inspect <imagename/imageid>显示镜像详细信息
docker images 或者 docker image ls列出本地服务器镜像列表
docker image prune删除未使用的镜像
docker pull imagename:tag从远程仓库拉取镜像到本地服务器
docker push imagename:tag推送本地镜像到远程仓库
docker image rm <imagename/imageid>删除镜像
docker tag imagename:tag newimagename:tag给镜像打标签
docker save imagename:tag -o imagename.tar将镜像导出到tar文件
docker load -i imagename.tar将导出的镜像tar文件加载为docker镜像
Docker image常用命令示例
列出本地主机镜像列表
sudo docker images或docker image ls

在这里插入图片描述
展示出的所有列各项说明

名称作用
REPOSITORY镜像仓库地址
TAG镜像ID
IMAGE ID镜像标签
CREATED镜像的创建时间
SIZE镜像大小
查找镜像

1.在Docker Hub官方网站搜索镜像,Docker Hub
在这里插入图片描述
2.在安装了Docker的客户端的命令行搜索镜像

docker search <imagename>

在这里插入图片描述

从远程仓库拉取镜像

1.不指定版本号的话,默认拉取镜像时会拉取远程仓库的(latest)最新版镜像

docker pull nginx

在这里插入图片描述

也可以指定版本号拉取远程仓库的docker镜像

docker pull nginx:<version>
推送本地镜像到远程仓库及创建标签

推送本地镜像到远程仓库需要先在远程仓库建立对应的仓库地址而且标签要与远程仓库一致

给镜像打标签

docker tag nginx:latest repo.haubo.cn/k8s-test/nginx:v1

推送到远程仓库(需先登录远程仓库)

docker push repo.haubo.cn/k8s-test/nginx:v1

在这里插入图片描述

Docker容器常用操作指令

命令说明
docker run创建并启动一个容器
docker exec containerID/containername /bin/bash进入容器
docker ps containerID/containername查看容器运行信息及状态
docker ps -a查看所有容器运行状态
docker logs containerID/containername查看容器日志
docker rm containerID/containername删除容器前提是容器处于非运行状态
docker create创建容器但不启动
docker top containerID/containername查看容器中进程
docker cp容器与物理机之间进行数据复制
docker startcontainerID/containername启动容器
docker stop containerID/containername停止容器
docker restart containerID/containername重启容器
docker pause/docker unpause containerID/containername暂停/恢复容器
docker rename 原容器名称 新容器名称容器重命名
Docker container常用命令示例
创建并运行一个容器

docker run 常用参数

参数作用
-d后台运行容器,并返回容器ID
-i以交互式运行容器,通常与-t结合使用
-p端口映射,格式为:宿主机端口:容器端口
-t为容器重新分配一个伪输入终端,通常与-i结合使用
–name=“xxxname”为容器指定一个名称
–dns xx.xx.xx.xx为容器指定一个dns服务器,默认与宿主机一致
-h指定容器的hostname
-e arg=“value”设置环境变量
-env-file=[]从指定文件读入环境变量
–expose=[]开放一个端口或者一组端口
–cpuset=“0-2” or --cpuset=“0,1,2”绑定容器到指定的cpu运行
-m设置容器使用内存的最大值
-v 宿主机目录 容器目录挂载容器目录到宿主机目录

示例

root@VM-16-9-ubuntu:~# docker run -it -d --name demo-container -p 8888:80 -v /data:/usr/share/nginx nginx:latest
0e704352c433c916927f5c5ce60c5e4726374cc9be7ed8c1f02b5b3e48f6770b

停止容器
root@VM-16-9-ubuntu:~# docker stop demo-container
demo-container
启动容器
root@VM-16-9-ubuntu:~# docker start demo-container
demo-container

删除容器
root@VM-16-9-ubuntu:~# docker rm demo-container
demo-container

进入容器
root@VM-16-9-ubuntu:~# docker exec -it demo-container /bin/bash
root@d8da369a13a5:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看docker容器日志
docker logs demo-container

在这里插入图片描述

复制宿主机文件到容器内
docker cp /root/demo.txt demo-container:/tmp

在这里插入图片描述

复制docker容器内部文件到宿主机
docker cp demo-container:/opt/test.txt /tmp

在这里插入图片描述

使用Dockerfile构建docker镜像

Dockerfile常用指令
指令作用
FROM指定基础镜像
MAINTAINER指定镜像维护者信息
RUN执行命令
CMD用于指定在容器启动时所要执行得命令
EXPOSE声明容器的服务端口
ENV设置环境变量
COPY复制文件
ADD更高级的复制文件命令文件为压缩包时会自动解压
ENTRYPOINT给容器配置一个可执行程序
VOLUME挂在宿主机目录
USER指定当前用户
WORKDIR指定工作目录
LABEL为镜像添加元数据
Dockerfile示例
编写Dockerfile文件
root@VM-16-9-ubuntu:~# cat Dockerfile
FROM nginx
MAINTAINER Huang-Bo "17521365211@163.com"
RUN echo "这是使用Dockerfile构建的本地镜像!" > /usr/share/nginx/html/index.html
WORKDIR /etc/nginx
EXPOSE 80

使用docker build构建镜像

root@VM-16-9-ubuntu:~# docker build -t myngx -f Dockerfile .
Sending build context to Docker daemon    146MB
Step 1/5 : FROM nginx
latest: Pulling from library/nginx
1efc276f4ff9: Pull complete
baf2da91597d: Pull complete
05396a986fd3: Pull complete
6a17c8e7063d: Pull complete
27e0d286aeab: Pull complete
b1349eea8fc5: Pull complete
Digest: sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
Status: Downloaded newer image for nginx:latest
 ---> b692a91e4e15
Step 2/5 : MAINTAINER Huang-Bo "17521365211@163.com"
 ---> Running in 5aae230aa4d3
Removing intermediate container 5aae230aa4d3
 ---> 2a440c8e7947
Step 3/5 : RUN echo "这是使用Dockerfile构建的本地镜像!" > /usr/share/nginx/html/index.html
 ---> Running in 44698fb7c2e8
Removing intermediate container 44698fb7c2e8
 ---> 47d048cf8b07
Step 4/5 : WORKDIR /etc/nginx
 ---> Running in 57824a5b893c
Removing intermediate container 57824a5b893c
 ---> 0aee16bf06b4
Step 5/5 : EXPOSE 80
 ---> Running in 0b9ae94d1c35
Removing intermediate container 0b9ae94d1c35
 ---> 667135d55138
Successfully built 667135d55138
Successfully tagged myngx:latest

使用我们自己构建的镜像启动一个容器
root@VM-16-9-ubuntu:~# docker run -it -d --name demo-myngx -p 8888:80 myngx:latest

######在宿主机访问容器看下效果

root@VM-16-9-ubuntu:~# curl 127.0.0.1:8888
这是使用Dockerfile构建的本地镜像!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱吃肉@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值