Docker那些事-安装和使用

软件开发最大的麻烦事之一,就是环境配置,操作系统的设置,各种库和组件的安装,只有它们都正确,软件才能运行,环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。虚拟机(virtual machine)就是带环境安装的一种解决方案,但是它资源占用多、冗余步骤多、启动慢,由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC),Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

Docker 的用途

目前有三大类。

  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker 的安装与启动

这里是在 CentOS 7 中去安装 Docker,首先更新下配置下阿里云镜像:

yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后安装 Docker

yum install docker-ce

安装完成后查看 Docker 版本

docker -v

接着,安装完成后,设置 ustc 镜像

mkdir -p /etc/docker
vim /etc/docker/daemon.json

加入下面这段,保存退出即可

{
  "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

启动 Docker,并查看状态

systemctl start docker
systemctl status docker

停止和重启 Docker

systemctl stop docker
systemctl restart docker

设置开机启动

enable docker

Docker 常用命令

镜像命令

搜索镜像

docker search 镜像名

拉取镜像

docker pull 镜像名

删除镜像

docker rmi 镜像id

查看镜像

docker images

镜像备份

docker save -o 保存文件名 镜像名

镜像迁移

docker load -i 备份的文件名
容器命令

创建容器,交互式方式,退出容器后,容器就停止了,守护式就不会。

docker run -ti --name=容器名 镜像名:标签 /bin/bash    //交互方式启动
docker run -di --name=容器名 镜像名:标签    //守护方式启动

查看容器

docker ps  //查看正在运性的容器
docker ps -a //查看所有容器
docker ps -f status=exited  //查看停止的容器

容器启动、停止

docker start 容器id或容器名
docker stop 容器id或容器名

进入容器、退出容器

docker exec -it 容器名 /bin/bash
exit

文件拷贝

docker cp 需要拷贝的文件路径 容器名:容器目录    //拷贝进容器
docker cp 容器名:容器目录 需要拷贝的文件路径    //拷贝容器的内容出去

目录挂载,可以在创建容器的时候,将宿主的目录与容器内的目录进行映射,这样就可以修改宿主主机某个目录的文件去影响容器

docker run -ti --name=容器名 -v 宿主主机目录:容器目录 --name=容器名 镜像名:标签

查看容器 ip

docker inspect --fotmat='{{.NetworkSettings.IPAddress}}' 容器名

删除容器

docker rm 容器名

容器保存为镜像

docker commit 容器名  镜像名

Dockerfile

Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

构建JDK镜像为例,准备好目录 /usr/local/dockerjdk/ 把 jdk 包放在里面,然后新建 Dockerfile,名字不能改变

vim Dockerfile  

输入内容

FROM centos:7
MAINTAINER dane
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_201
ENV JAR_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLAS
SPATH
ENV PATH $JAVA_HOME/bin:$PATH

保存退出后,执行构建

docker build -t='jdk1.8' .

私有仓库

先拉取私有仓库镜像

docker pull registry

启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

打开 http:xxx.xxx.xx.xx:5000/v2/_catalog 可以看到 {"respositories":[]} 表示开启成功,接着修改 daemon.json,添加

{"insecure-registries":["ip+端口"]}

然后重启 docker 就好了,接着可以测试,首先标记私有仓库镜像

docker tag 镜像名 自定义的标记镜像名

上传

docker push 自定义的标记镜像名

报 Client.Timeout exceeded while awaiting headers,vim /etc/docker/daemon.json 修改成

{
"registry-mirrors":["http://f1361db2.m.daocloud.io"]
}

你可能感兴趣的:(Docker那些事-安装和使用)