docker的入门使用

分类: 服务器  • 发布时间: 2019-03-24 12:06:26  • 浏览量:620

容器技术是轻量级虚拟化技术,利用该技术能够将应用打包发布到不同的容器化服务器上运行。在此过程中,可以减少繁琐的应用环境的构建。容器技术领域中有一个佼佼者叫Docker。


Docker在2017年3月1日后,版本发生了改变,之前叫:docker或者docker-engine,之后分成了企业版和社区版,社区版叫docker-ce。


如果我们有一台比较厉害的服务器,但是我们需要在上面放两个应用,而且想让这两个应用互不干扰,那么我们首先要解决的问题就是应用环境隔离的问题。我们可以采取的一种方案是:装个虚拟机,然后在这两个虚拟机中个装一个操作系统,然后在分别部署我们的应用。不过现在我们也可以用Docker,你可以把Docker看成是一个轻量级的虚拟机。关于Docker和虚拟机的具体区别,大家可以自行查阅资料。


Docker的组成

  1. registry:Docker的镜像库,制作好的Docker镜像存储的地方,方便用户推送和拉取。类似于虚拟机的镜像源,yum中的软件源,python中pip模块存放的地方、手机上的应用市场等一样。

  2. image:镜像,就像虚拟机中的镜像文件、yum中的rpm软件包、pip中的whl包,安卓中的apk包。

  3. container:镜像启动运行后的一种状态。


   



在CentOS上安装docker-ce

建议使用CentOS7进行安装,因为最新版的Docker要求linux内核版本不低于 3.10,而CentOS6默认内核小于此版本。


如果我们之前安装过老版本或者系统自带的有老版本的docker,那么我们需要卸载一下旧版本

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

卸载完旧版本以后,我们可能需要先把依赖包安装一下

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

然后添加docker-ce的稳定源(以下二选一即可)

# 这个是官方镜像源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 这个是阿里云的镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum的缓存(根据网络情况,可能会失败,需要多次尝试)

# 本步可选yum clean all# 本步必选yum makecache fast


然后安装docker-ce

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

安装完成后可以查看docker版本:

docker --version

设置docker开机启动,并启动docker

# 设置开机启动systemctl enable docker# 启动dockersystemctl start docker

建立docker用户组(选做,如果当前用户不是root用户的时候需要做)

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。


建立 docker 组:

sudo groupadd docker

将当前用户加入 docker 组:

sudo usermod -aG docker $USER

docker启动后,我们就可以去镜像仓库中尝试搜索一下:

docker search ubuntu

配置国内镜像仓库

新建配置文件:

vi /etc/docker/daemon.json

在配置文件中加入国内镜像仓库地址(这个仓库我们其实可以弄成我们自己的):

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

然后重启docker

systemctl daemon-reloadsystemctl restart docker

基本使用

镜像仓库中有大量的高质量的镜像可以用。我们这里以使用docker快速安装nginx作为例子:


在docker默认仓库中搜索nginx镜像:

docker search nginx:1.14.2

下载nginx镜像

docker pull nginx

查看本地镜像列表(选做):

docker images

启动镜像


# 方式1:启动镜像并进入容器(可执行命令)docker run -it --rm  -p 80:80 --name ssnginx nginx /bin/bash


-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端

--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间(生产环境请谨慎使用)

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash

-p 80:80:将容器的80端口映射到主机的80端口

--name ssnginx:将容器命名为ssnginx


# 如果需要后台运行容器,则表格 -d 参数即可docker run -it --rm  -p 80:80 --name ssnginx -d nginx /bin/bash

此时一般在浏览器中访问您的IP,就可以访问到Nginx默认页了。(如果使用了交互操作,需要进入容器内,启动Nginx)


一般我们可能直接启动,不需要交互操作:

# 这种情况下nginx是默认启动的
docker run -p 80:80 --name ssnginx -d nginx


查看运行着的容器列表

docker ps

如果想停止某个容器的话:

docker stop ssnginx

如果我们想进入某个容器

# 使用该方式进入, 退出后该容器会停止运行# 9b28426ff2cc 可以通过docker ps 查看到docker attach 9b28426ff2cc

或者:

# 使用该方式进入, 退出后该容器会停止运行# ssnginx 是我们启动容器时设置的名字docker attach ssnginx

或者:

# 使用该方式进入, 退出后容器依然在运行docker exec -it ssnginx /bin/bash

退出容器使用:

exit

可能会遇到的问题


问题1:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:293: copying bootstrap data to pipe caused \"write init-p: broken pipe\"": unknown.

这个问题最简单的一个解决方式就是更新一下CentOS版本:

yum -y update

# 更新完成后别忘了重启一下系统

reboot


问题2:

CentOS7 防火墙开放 80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent


问题3:

查看Linux发行版:

cat /etc/issue


问题4:

进入容器后发现有些命令不存在

因为容器可以看成是一个轻量级的虚拟机,如果你用的是别人做好的镜像,那么你需要确定对方的Linux发行版,然后根据其发行版安装对应的命令即可


问题5:

docker: Error response from daemon: Conflict. The container name "/ssnginx" is already in use by container "48c97ed4979c9a2bf82cc4ba4441c99c4a3180e30523ff87e777ac9515465964". You have to remove (or rename) that container to be able to reuse that name.

如果我们启动容器的时候,没有使用参数--rm,那么我们如果中途退出后,再启动容器就会遇到这个问题,这是是因为docker容器里面已经存在,如果不需要可以使用docker rm 容器名进行删除;如果需要使用命令docker restart 容器名称重启就可以了。


原文来源:docker的入门使用



http://xuebuting.com/thread-16.htm
文章标签: centos, nginx, docker