文档章节

Docker容器学习梳理--基础环境安装

济远
 济远
发布于 2017/08/28 22:00
字数 2499
阅读 7
收藏 1
点赞 0
评论 0

 

以下是centos系统安装docker的操作记录

1)第一种方法:采用系统自带的docker安装,但是这一般都不是最新版的docker
安装epel源
[root@docker-server ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
[root@docker-server ~]# rpm -ivh epel-release-latest-6.noarch.rpm
[root@docker-server ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[root@docker-server ~]# sed -i 's/^#baseurl/baseurl/g' /etc/yum.repos.d/epel.repo
[root@docker-server ~]# sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/epel.repo

安装docker-io
[root@docker-server ~]# yum install docker-io -y

修改docker镜像和容器存储路径
[root@docker-server ~]# vim /etc/sysconfig/docker
------------
other_args="--graph=/docker"                                 //配置这一行
------------

启动docker
[root@docker-server ~]# service docker start
[root@docker-server ~]# chkconfig docker on
[root@docker-server ~]# ps -ef|grep docker
root 36263 1 7 19:35 pts/0 00:00:00 /usr/bin/docker -d --graph=/docker
root 36413 34216 0 19:35 pts/0 00:00:00 grep --color docker

[root@docker-server ~]# ls /docker/
containers devicemapper graph init linkgraph.db repositories-devicemapper tmp trust volumes

获取官方centos或ubuntu镜像。
这里需要特别说明下:通过实测发现,现在在centos6下的docker获取镜像失败,在centos7下的docker获取镜像可以。
所以一般建议在centos7下部署docker环境,然后docker获取centos6的容器镜像(centos7容器镜像有不少坑)
[root@docker-server ~]# docker pull centos
[root@docker-server ~]# docker pull ubuntu
[root@docker-server ~]# docker images            //查看本地镜像

运行一个docker容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。(/bin/bash命令语句必须要放在镜像名的后面)
[root@docker-server ~]# docker run -i -t centos /bin/bash
[root@docker-server ~]# docker run -i -t ubuntu /bin/bash

[root@docker-server ~]# docker -v                       //版本不是最新版的
Docker version 1.7.1, build 786b29d/1.7.1

上面是centos6系统下做法。如果是centos7的话,直接yum install docker即可安装

2)第二种方法:安装Docker官方的最新发行版(推荐在centos7下采用这种方法安装最新版本的docker)
[root@docker-server ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@docker-server ~]# curl -sSL https://get.daocloud.io/docker | sh
[root@docker-server ~]# systemctl enable docker  
[root@docker-server ~]# systemctl start docker

[root@docker-server ~]# systemctl stop docker          //关闭
[root@docker-server ~]# systemctl restart docker      //重启

安装过程结束后,可执行下面命令验证安装的状态。
如果看到输出 active (running) 就表示安装成功。
[root@docker-server ~]# systemctl status docker

查看docker版本
[root@docker-server ~]# docker -v                 //最新版本
Docker version 1.12.5, build 7392c3b

1

2

3

4

5

6

7

开机启动,systemctl enable docker.service          (docker.service改为docker也可以)

启动,systemctl start/stop/restart/status docker.service

启动,systemctl start docker.service

帮助,docker --help

概要信息,docker info

镜像查看,docker images

容器查看,即进程查看,docker ps -a

获取官方centos或ubuntu镜像
[root@docker-server ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
45a2e645736c: Pull complete
Digest: sha256:c577af3197aacedf79c5a204cd7f493c8e07ffbce7f88f7600bf19c688c38799
Status: Downloaded newer image for centos:latest

[root@docker-server ~]# docker images            //查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67591570dd29 2 weeks ago 191.8 MB

上面在centos7下安装的docker,如果在获取centos容器镜像的时候不指定版本,那么下载下来的容器镜像默认也是centos7版本;
但是可以在获取镜像的时候指定版本,比如:
[root@linux-node2 ~]# docker pull centos:centos6
centos6: Pulling from library/centos
32c4f4fef1c6: Pull complete
Digest: sha256:1092df198d3da4faccc0660941b763ce5adf133b0ec71701b760d6f173c1f47b
Status: Downloaded newer image for centos:centos6
[root@linux-node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67591570dd29 2 weeks ago 191.8 MB
centos centos6 8315978ceaaa 8 weeks ago 194.6 MB
daocloud.io/daocloud/daocloud-toolset latest 1ab33797d8a1 8 months ago 150.2 MB

还可以如下获取镜像
docker pull ubuntu
docker pull ubuntu:14.04
docker pull ubuntu:latest
docker pull centos:latest
docker pull centos:7.1
docker pull centos:6.5
docker pull centos:6.8
docker pull centos:6
docker pull centos:7

启动容器,并且进入到centos容器的bash命令。
启动时的现象:其实相当于启动了一个虚拟机;
[root@linux-node2 ~]# docker run -i -t centos /bin/bash
[root@fd81256d3c96 /]# echo "welcome to docker"
welcome to docker
[root@8f65f826ad80 /]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

通过docker ps命令可以列出当前所有正在运行的container
[root@linux-node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd81256d3c96 centos "/bin/bash" About a minute ago Up About a minute focused_bose

下面命令将会停止上面启动的实例,这样就会自动强制退出容器
[root@linux-node2 ~]# docker stop fd81256d3c96
fd81256d3c96
[root@linux-node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

其他:
docker ps -l //列出最近一次启动的,且正在运行的container
docker ps -a //列出所有的container

docker run -p 80:8080 <image> <cmd> //映射容器的8080端口到宿主机的80端口
docker rm `docker ps -a -q` //删除所有容器
docker rm $CONTAINER_ID //删除容器id为CONTAINER_ID的容器
docker images //查看本地镜像
docker attach $CONTAINER_ID //启动一个已存在的docker实例
docker stop $CONTAINER_ID //停止docker实例(或者直接退出容器登陆;不然这个命令执行后也会强制退出容器的登陆)
docker logs $CONTAINER_ID //查看docker实例运行日志,确保正常运行
docker inspect $CONTAINER_ID //查看container的实例属性,比如ip等等

------------------------------------------------------------------------------------------------------------------------
如下:举例说明在docker下部署nginx
宿主机上执行下面命令:启动容器,进入centos容器的/bin/bash命令,并且会映射container的8080端口到宿主机的8888端口
/home/wangshibo/docker为要挂载的宿主机本地目录(如果提前不创建,也会自动生成的);
/home/mycontainer为docker映射路径,即在容器里的路径。这个和上面挂载宿主机的文件夹里内容一样!(下面是基于centos镜像创建的容器)
[root@linux-node2 ~]# docker run -t -i -v /home/wangshibo/docker:/home/mycontainer:rw -p 8888:8080 centos /bin/bash

1

2

3

4

5

6

docker命令包含以下三个部分:

docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:

-i:表示以“交互模式”运行容器

-t:表示容器启动后会进入其命令行

-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

[root@8f65f826ad80 /]# yum install -y wget lsof vim

添加CentOS 7 Nginx yum资源库,然后安装nginx
[root@8f65f826ad80 /]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@8f65f826ad80 /]# yum install -y nginx

[root@8f65f826ad80 conf.d]# pwd
/etc/nginx/conf.d
[root@8f65f826ad80 conf.d]# cat test.conf
server {
listen 8080;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
}

[root@8f65f826ad80 conf.d]# mkdir -p /var/www/html
[root@8f65f826ad80 conf.d]# cat /var/www/html/test.html
this is nginx page of docker!!

启动/关闭/重启nginx:systemctl start/stop/restart nginx.service
开机启动nginx:systemctl enable nginx.service
网站文件存放默认目录:/usr/share/nginx/html
网站默认站点配置:/etc/nginx/conf.d/default.conf
自定义Nginx站点配置文件存放目录:/etc/nginx/conf.d/
Nginx全局配置:/etc/nginx/nginx.conf

启动nginx,有如下报错
[root@8f65f826ad80 conf.d]# systemctl start nginx.service
Failed to get D-Bus connection: Operation not permitted
--------------------------------------------------------------------------------------------------------------------
这是centos7容器里面出现的一个BUG!
即centos7镜像创建的容器里面安装服务后,不能用systemctl/service启动服务,centos6的容器里没有这个坑!
可以通过使用其他的方式启动或者换用centos6的镜像来避免这个错误。

解决方案如下:
原因是dbus-daemon没能启动。其实systemctl并不是不可以使用,可以将你的CMD或者entrypoint设置为/usr/sbin/init即可。
这样就会自动将dbus等服务启动起来。即采用 /usr/sbin/init自动启动dbus daemon

下面这个命令会一直在执行中,不能停止这个命令
[root@linux-node2 ~]# docker run --privileged -t -i -v /home/wangshibo/docker:/home/mycontainer:rw -p 8888:8080 centos /sbin/init

保证上面的命令执行后,可以查到它的容器ID(这个ID就是nginx所在容器的ID)
[root@linux-node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaf66f1e43ab centos "/sbin/init" 16 seconds ago Up 15 seconds 0.0.0.0:8888->8080/tcp hungry_khorana

接着在另一个终端窗口下执行下面命苦:即通过上面容器ID进入到它的/bin/bash命令下
[root@linux-node2 ~]# docker exec -it eaf66f1e43ab /bin/bash
[root@eaf66f1e43ab /]#
然后就接着安装nginx的操作了(从上面的yum install -y wget lsof vim开始重新操作)
--------------------------------------------------------------------------------------------------------------------

如上解决后,再次启动nginx
[root@eaf66f1e43ab /]# systemctl start nginx.service
[root@eaf66f1e43ab /]# ps -ef|grep nginx
root 229 1 0 09:43 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 230 229 0 09:43 ? 00:00:00 nginx: worker process
root 233 87 0 09:43 ? 00:00:00 grep --color=auto nginx
[root@eaf66f1e43ab /]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 229 root 7u IPv4 60407703 0t0 TCP *:webcache (LISTEN)
nginx 230 nginx 7u IPv4 60407703 0t0 TCP *:webcache (LISTEN)

记得在宿主机的防火墙上开启8888端口:
[root@linux-node2 home]# vim /etc/sysconfig/iptables
.......
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
[root@linux-node2 home]# systemctl restart iptables.service

验证访问(宿主机ip假设为110.117.88.99)

检查下容器创建时映射目录和挂载目录情况:
[root@eaf66f1e43ab ~]# ll /home/mycontainer/       
total 0
[root@eaf66f1e43ab ~]# echo "123456" > /home/mycontainer/test
[root@eaf66f1e43ab ~]# cat /home/mycontainer/test            //容器里面的情况
123456

[root@linux-node2 ~]# cat /home/wangshibo/docker/test      //容器外挂载到宿主机目录下的情况
123456

可以将这个docker主机添加到DaoCloud云平台里面管理

-------------------------------------------------------------------------------------------------------------------------------------

[下载DaoCloud里面的镜像]可以通过DaoCloud云平台-->镜像仓库-->发现镜像,找到对应镜像的地址。最后可以根据这个镜像地址下载到docker服务器上,如下:

然后找到对应镜像的镜像地址:

然后就可以在服务器上进行镜像下载了:

-------------------------------------------------------------------------------------------------------------------------------------

以下是Ubuntu 12.04以上系统安装docker环境的操作记录

安装方法一
ubuntu14.04以上的版本都是自带docker安装包的,所以可以直接安装,但一般也不是最先版本。
[ubuntu@localhost:~]$ sudo apt-get update
[ubuntu@localhost:~]$ sudo apt-get install docker.io

安装方法二
安装 Docker 官方的最新发行版
[ubuntu@localhost:~]$ curl -sSL https://get.daocloud.io/docker | sh

安装过程结束后,可执行下面命令验证安装结果。如果看到输出 docker start/running 就表示安装成功。
[ubuntu@localhost:~]$ sudo service docker status

--------------或者使用下面的安装,也是最新版的docker--------------------
[ubuntu@localhost:~]$ sudo apt-get update
[ubuntu@localhost:~]$ curl -s https://get.docker.io/ubuntu/ | sudo sh
这个方法启动docker若出现下面错误;
FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()
别担心,请安装apparmor软件即可
[ubuntu@localhost:~]$ sudo apt-get install apparmor

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

分类: Docker

© 著作权归作者所有

共有 人打赏支持
济远
粉丝 0
博文 13
码字总数 13858
作品 0
南京
程序员
Docker容器技术 学习笔记汇总

“如果你不出去走走,你就会以为这就是全世界。” 一直在嵌入式领域,这次遇到Docker算是长了见识。刚好公司同事们对这块了解地不多,那就把Docker容器技术的学习梳理成系列笔记,让其他伙伴少...

iotisan ⋅ 2017/10/20 ⋅ 0

Docker容器学习梳理--基础知识(1)

Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。 Docker是通过内核虚拟化技术(namespace以及cgroups等)来...

dengaosky ⋅ 2017/12/27 ⋅ 0

Docker容器学习梳理--基础知识(2)

之前已经总结了Docker容器学习梳理--基础知识(1),但是不够详细,下面再完整补充下Docker学习的一些基础。 Docker是个什么东西 Docker是一个程序运行、测试、交付的开放平台,Docker被设计...

dengaosky ⋅ 2017/12/27 ⋅ 0

Centos7.3 Docker安装部署学习记录1

一、Docker基础环境的安装 1. 环境说明 本机采用操作系统如下: CentOS-7.3-X86-64,内核3.10 x64位,docker 1.12.x版本。 建议采用CentOS7版本或ubuntu版本,本文采用CentOS7即CentOS-7-x86_...

koumm ⋅ 2017/06/14 ⋅ 0

如何用Docker成为更高效的数据科学家?

使用 Docker 容器来开发机器学习模型的好处有很多。近日,GitHub 的资深机器学习科学家 Hamel Husain 在 Towards Data Science 上发表了一篇入门级的 Docker 容器教程,文章从基本的概念谈起...

uwr44uouqcnsuqb60zk2 ⋅ 2017/12/22 ⋅ 0

教程 如何用Docker成为更高效的数据科学家?

     使用 Docker 容器来开发机器学习模型的好处有很多。近日,GitHub 的资深机器学习科学家 Hamel Husain 在 Towards Data Science 上发表了一篇入门级的 Docker 容器教程,文章从基本的...

深度学习 ⋅ 2017/12/21 ⋅ 0

DeepLearning笔记:Docker 入门和用 Python 实现词频统计

一、神经网络简介 神经网络简史: 40年代:概念雏形(没有学习算法) 50年代:可用的学习算法 - 感知机 1969年:Minsky 泼冷水 70年代:BP 算法,训练多层神经网络 90年代:SVM 支持向量机「...

Kidult ⋅ 2017/12/27 ⋅ 0

tech share - docker 入门

date: 2017-12-19 14:04:30 title: tech share - docker 入门 slide: https://c.daydaygo.top/landslide/TS20171222.html 团队内很多同学对 docker 感兴趣, 于是准备了这期分享, 希望可以帮助......

daydaygo ⋅ 2017/12/21 ⋅ 0

教程 | 如何用Docker成为更高效的数据科学家?

  选自Medium   作者:Hamel Husain   机器之心编译   参与:Panda      使用 Docker 容器来开发机器学习模型的好处有很多。近日,GitHub 的资深机器学习科学家 Hamel Husain 在...

机器之心 ⋅ 2017/12/21 ⋅ 0

每天5分钟玩转Docker容器技术(一)

写在最前面 《每天5分钟玩转Docker容器技术》是一个有关容器技术的教程,有下面两个特点: 系统讲解当前最流行的容器技术 从容器的整个生态环境到各种具体的技术,从整体到细节逐一讨论。 重...

⋅ 2017/12/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部