Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1894|回复: 4
打印 上一主题 下一主题

CentOS 7下安装 Docker

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2017-12-8 14:06:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 java 于 2017-12-15 17:08 编辑

http://www.runoob.com/docker/centos-docker-install.html
Docker 要求 CentOS 系统的内核版本高于 3.10
$ uname -r
3.10.0-693.5.2.el7.x86_64
安装 Docker
Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
# yum -y install docker

启动 Docker 后台服务
# service docker start


查看版本
# docker version
  1. Client:
  2. Version:         1.12.6
  3. API version:     1.24
  4. Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
  5. Go version:      go1.8.3
  6. Git commit:      85d7426/1.12.6
  7. Built:           Tue Oct 24 15:40:21 2017
  8. OS/Arch:         linux/amd64

  9. Server:
  10. Version:         1.12.6
  11. API version:     1.24
  12. Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
  13. Go version:      go1.8.3
  14. Git commit:      85d7426/1.12.6
  15. Built:           Tue Oct 24 15:40:21 2017
  16. OS/Arch:         linux/amd64
复制代码

/////////////////////////////////////////////////////
CentOS7升级最新版本Docker

首先升级一下系统包 (可以跳过)

$ sudo yum update

卸载旧版本的 Docker

$ sudo yum erase docker docker-common docker-client docker-compose

添加 Docker 的 yum 源

创建一个 /etc/yum.repos.d/docker.repo 文件,内容如下:

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg


安装新版本 Docker
$ sudo yum install -y docker-engine

安装完后设置为系统开机自动启动服务
$ sudo systemctl enable docker.service

启动服务
$ sudo systemctl start docker
测试一下
docker info
docker version

//////////////////////////////////////////////////



测试运行 hello-world从已有的image生成自己的image1.通过docker images找到要提交的container ID




docker tag docker.io/ubuntu:16.04 hechengjin/mailserver:ubuntu16.04-wildduck


docker login -u username -p password


docker push hechengjin/mailserver:ubuntu16.04-wildduck
# docker run hello-world
  1. Hello from Docker!
  2. This message shows that your installation appears to be working correctly.

  3. To generate this message, Docker took the following steps:
  4. 1. The Docker client contacted the Docker daemon.
  5. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  6.     (amd64)
  7. 3. The Docker daemon created a new container from that image which runs the
  8.     executable that produces the output you are currently reading.
  9. 4. The Docker daemon streamed that output to the Docker client, which sent it
  10.     to your terminal.

  11. To try something more ambitious, you can run an Ubuntu container with:
  12. $ docker run -it ubuntu bash

  13. Share images, automate workflows, and more with a free Docker ID:
  14. https://cloud.docker.com/

  15. For more examples and ideas, visit:
  16. https://docs.docker.com/engine/userguide/
复制代码

查看运行的容器
docker ps

后台运行容器



查看容器内的标准输出

~$ docker logs 2b1b7a428627


停止容器
~$ docker stop 2b1b7a428627docker run -i -t hechengjin/mailserver:ubuntu16.04-wildduck  /bin/bash

Docker 客户端
~# docker
通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

~$ docker run -d -p 5000:5000 training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。容器内部的 5000 端口映射到我们本地主机的 5000 端口上。

网络端口的快捷方式
docker port 7a38a1ad55c6
5000/tcp -> 0.0.0.0:5000
docker inspect james

docker inspect --format ' {{.Name}} {{.NetworkSettings.Networks.hechengjin_default.IPAddress}}'  $(docker ps -a -q)
查看容器的进程
docker top 7a38a1ad55c6

查看 Docker 容器的配置和状态信息
docker inspect 7a38a1ad55c6

停止应用容器
docker stop 7a38a1ad55c6

启动应用容器
docker start 7a38a1ad55c6

重启运行中的容器
docker restart 7a38a1ad55c6

移除应用容器
docker rm 7a38a1ad55c6
删除容器时,容器必须是停止状态,否则会报错
运行交互式的容器
runoob@runoob:~$ docker run -i -t ubuntu:16.04 /bin/bash
root@dc0050c79503:/#
各个参数解析:
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。


当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

列出本地主机上的镜像
docker images
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签 docker inspect james
docker inspect --format ' {{.Name}} {{.NetworkSettings.Networks.hechengjin_default.IPAddress}}'  $(docker ps -a -q)
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为16.04的ubuntu系统镜像来运行容器时,命令如下:
docker run -t -i ubuntu:16.04 /bin/bash
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

获取一个新的镜像
预先下载一个镜像
docker pull ubuntu:16.04

查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
runoob@runoob:~$  docker search httpd

NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布

拖取镜像
docker pull httpd
Using default tag: latest

创建镜像
1.从已经创建的容器中更新镜像,并且提交这个镜像
在容器内进行相关操作后
(
docker run -t -i ubuntu:16.04 /bin/bash
apt-get update
)
通过命令 docker commit来提交容器副本。
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
2.使用 Dockerfile 指令来创建一个新的镜像
...

设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。



从已有的image生成自己的image并上传到自己的远程仓库
docker tag docker.io/ubuntu:16.04 hechengjin/mailserver:ubuntu16.04-wildduck

docker login -u username -p password

docker push hechengjin/mailserver:ubuntu16.04-wildduck
进入image安装软件
docker run -i -t hechengjin/mailserver:ubuntu16.04-wildduck  /bin/bash



docker inspect james

docker inspect --format ' {{.Name}} {{.NetworkSettings.Networks.hechengjin_default.IPAddress}}'  $(docker ps -a -q)

回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2017-12-8 14:41:58 | 只看该作者
出现如下错误的解决方法
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
权限问题。需要root用户才能运行。
从0.5.2开始docker的守护进程总是以root用户来运行。docker守护进程绑定的是Unix的socket而不是一个TCP端口。Unix的socket默认属于root用户,所以,使用docker时必须加上sudo。
从0.5.3开始,创建一个名为docker组,然后将用户加入这个组内。当docker守护进程启动时,它会把Unix的读写权限赋予docker组。这样,当你作为docker组内用户使用docker客户端时,你就无须使用sudo了。

解决
把当前用户加到docker用户组中:
# 添加docker用户组
sudo groupadd docker  
# 把自己加到docker用户组中
sudo gpasswd -a hechengjin docker
# 重启docker后台服务
sudo service docker restart  
重启系统,直接运行docker命令就行了,不用加上sudo。

回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
 楼主| 发表于 2017-12-8 19:31:27 | 只看该作者
本帖最后由 java 于 2017-12-11 12:04 编辑

从image创建一个新容器(run)

docker run -it --name wildduck1.0.0 hechengjin/mailserver:ubuntu16.04-wildduck /bin/bash

--name 指定新容器的名字

列出所有的容器

docker ps -a

列出运行中的容器
docker ps

关闭运行中的容器
docker stop (NAME 或 CONTAINER ID )

删除容器
docker rm (NAME 或 CONTAINER ID )

删除所有容器
docker rm $(docker ps -a -q)

删除images
docker rmi (IMAGE ID)

每次启动根据名称启动同一个容器
docker start -i wildduck1.0.0

附加到一个运行的容器上面
docker attach wildduck1.0.0

从一个容器中脱离出来DOCKER 给运行中的容器添加映射端口iptables -t nat -A PREROUTING -p tcp -m tcp –-dport [对外暴露端口] -j DNAT –-to-destination [docker的ip]:[docker内的应用端口]

sudo iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法1

1、获得容器IP

将container_name 换成实际环境中的容器名
docker inspect 03redis | grep IPAddress

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口
iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法2

1.提交一个运行中的容器为镜像

docker commit wildduck1.0.0 hechengjin/mailserver:ubuntu16.04-redis-01

2.运行镜像并添加端口

docker run -it --name 01redis -p 6379:6379 hechengjin/mailserver:ubuntu16.04-redis-01




hechengjin/mailserver:ubuntu16.04-redis-01


Make docker use IPv4 for port binding

/etc/sysconfig/docker-network
add DOCKER_NETWORK_OPTIONS=-ip=xx.xx.xx.xx
xx.xx.xx.xx being your real ipv4 (and not 0.0.0.0)
restart docker deamon

第一种方法
# echo 1 > /proc/sys/net/ipv6/bindv6only  只读
# echo "net.ipv6.bindv6only = 1" >> /etc/sysctl.conf       ----重启

sysctl net.ipv6.bindv6only

重启network服务
# systemctl restart network

查看是否修改成功
# sysctl net.ipv4.ip_forward






Ctrl+P+Q

docker start/stop/restart<container> :开启/停止/重启containerDOCKER 给运行中的容器添加映射端口iptables -t nat -A PREROUTING -p tcp -m tcp –-dport [对外暴露端口] -j DNAT –-to-destination [docker的ip]:[docker内的应用端口]

sudo iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法1

1、获得容器IP

将container_name 换成实际环境中的容器名
docker inspect 03redis | grep IPAddress

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口
iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法2

1.提交一个运行中的容器为镜像

docker commit wildduck1.0.0 hechengjin/mailserver:ubuntu16.04-redis-01

2.运行镜像并添加端口

docker run -it --name 01redis -p 6379:6379 hechengjin/mailserver:ubuntu16.04-redis-01




hechengjin/mailserver:ubuntu16.04-redis-01


Make docker use IPv4 for port binding

/etc/sysconfig/docker-network
add DOCKER_NETWORK_OPTIONS=-ip=xx.xx.xx.xx
xx.xx.xx.xx being your real ipv4 (and not 0.0.0.0)
restart docker deamon

第一种方法
# echo 1 > /proc/sys/net/ipv6/bindv6only  只读
# echo "net.ipv6.bindv6only = 1" >> /etc/sysctl.conf       ----重启

sysctl net.ipv6.bindv6only

重启network服务
# systemctl restart network

查看是否修改成功
# sysctl net.ipv4.ip_forward






docker start [container_id] :再次运行某个container(包括历史container)
docker attach [container_id]:连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例)
docker start -i <container>:启动一个container并进入交互模式(相当于先start,在attach)

  docker run -i -t <image> /bin/bash:使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t -p <host_port:contain_port>:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port映射到一个动态端口。
注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

DOCKER 给运行中的容器添加映射端口
iptables -t nat -A PREROUTING -p tcp -m tcp –-dport [对外暴露端口] -j DNAT –-to-destination [docker的ip]:[docker内的应用端口]

sudo iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法1

1、获得容器IP

将container_name 换成实际环境中的容器名
docker inspect 03redis | grep IPAddress

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口
iptables -t nat -A  DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379

方法2

1.提交一个运行中的容器为镜像

docker commit wildduck1.0.0 hechengjin/mailserver:ubuntu16.04-redis-01

2.运行镜像并添加端口

docker run -it --name 01redis -p 6379:6379 hechengjin/mailserver:ubuntu16.04-redis-01




hechengjin/mailserver:ubuntu16.04-redis-01


Make docker use IPv4 for port binding

/etc/sysconfig/docker-network
add DOCKER_NETWORK_OPTIONS=-ip=xx.xx.xx.xx
xx.xx.xx.xx being your real ipv4 (and not 0.0.0.0)
restart docker deamon

第一种方法
# echo 1 > /proc/sys/net/ipv6/bindv6only  只读
# echo "net.ipv6.bindv6only = 1" >> /etc/sysctl.conf       ----重启

sysctl net.ipv6.bindv6only

重启network服务
# systemctl restart network

查看是否修改成功
# sysctl net.ipv4.ip_forward


如果端口映射不成功,注意查看是否redis不允许远程访问 http://www.firemail.wang:8088/fo ... &extra=page%3D1


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
地板
 楼主| 发表于 2017-12-11 14:49:18 | 只看该作者
========容器内=========
启动redis
/etc/init.d/redis-server start
启动 mongodb
/usr/local/mongodb/bin/mongod --dbpath=/data/db --logpath=/usr/local/mongodb/log/mongodb.log --logappend --port 27017 --fork

========主机上=========
端口映射
--redis---
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379
--mongodb---
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 27017 -j DNAT --to-destination 172.17.0.2:27017


========客户端=========
客户端连接测试
---mongodb---
/usr/local/mongodb/bin/mongo 192.168.134.106:27017

---redis---
redis-cli -h 192.168.134.106


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
5#
 楼主| 发表于 2017-12-11 16:10:03 | 只看该作者
用Python建立最简单的web服务器

利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:

python -m Web服务器模块 [端口号,默认8000]
例如:
python -m SimpleHTTPServer 8080
然后就可以在浏览器中输入

http://localhost:端口号/路径
来访问服务器资源。
例如:
http://localhost:8080/index.htm(当然index.htm文件得自己创建)
其他机器也可以通过服务器的IP地址来访问。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-26 19:19 , Processed in 0.064602 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表