docker开机启动失败_docker的入门使用

容器技术是轻量级虚拟化技术,利用该技术能够将应用打包发布到不同的容器化服务器上运行。在此过程中,可以减少繁琐的应用环境的构建。容器技术领域中有一个佼佼者叫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:镜像启动运行后的一种状态。

90e62e57d7f8c34acedcc52a9c3a1992.png

在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

官方安装文档:https://docs.docker.com/install/linux/docker-ce/centos/

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

docker --version

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

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

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

默认情况下,docker 命令会使用 Unix socketDocker 引擎通讯。而只有 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-reload
systemctl restart docker

更多请参考:

https://yeasy.gitbooks.io/docker_practice/content/install/mirror.html

基本使用

镜像仓库中有大量的高质量的镜像可以用。我们这里以使用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默认页了。

查看运行着的容器列表

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 容器名称重启就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值