firemail
标题: CentOS 7下安装 Docker [打印本页]
作者: java 时间: 2017-12-8 14:06
标题: CentOS 7下安装 Docker
本帖最后由 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
安装 DockerDocker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
# yum -y install docker
启动 Docker 后台服务
# service docker start
查看版本
# docker version
- Client:
- Version: 1.12.6
- API version: 1.24
- Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
- Go version: go1.8.3
- Git commit: 85d7426/1.12.6
- Built: Tue Oct 24 15:40:21 2017
- OS/Arch: linux/amd64
- Server:
- Version: 1.12.6
- API version: 1.24
- Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
- Go version: go1.8.3
- Git commit: 85d7426/1.12.6
- Built: Tue Oct 24 15:40:21 2017
- 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
- Hello from Docker!
- This message shows that your installation appears to be working correctly.
- To generate this message, Docker took the following steps:
- 1. The Docker client contacted the Docker daemon.
- 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
- (amd64)
- 3. The Docker daemon created a new container from that image which runs the
- executable that produces the output you are currently reading.
- 4. The Docker daemon streamed that output to the Docker client, which sent it
- to your terminal.
- To try something more ambitious, you can run an Ubuntu container with:
- $ docker run -it ubuntu bash
- Share images, automate workflows, and more with a free Docker ID:
- https://cloud.docker.com/
- For more examples and ideas, visit:
- 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)
作者: java 时间: 2017-12-8 14:41
出现如下错误的解决方法
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。
作者: java 时间: 2017-12-8 19:31
本帖最后由 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
作者: java 时间: 2017-12-11 14:49
========容器内=========
启动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
作者: java 时间: 2017-12-11 16:10
用Python建立最简单的web服务器
利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:
python -m Web服务器模块 [端口号,默认8000]
例如:
python -m SimpleHTTPServer 8080
然后就可以在浏览器中输入
http://localhost:端口号/路径
来访问服务器资源。
例如:
http://localhost:8080/index.htm(当然index.htm文件得自己创建)
其他机器也可以通过服务器的IP地址来访问。
欢迎光临 firemail (http://firemail.wang:8088/) |
Powered by Discuz! X3 |