Docker安装与使用

Docker安装与使用

一、docker安装。

1、安装要求:

1)docker要求服务CentOS6以上,kernel 版本必须2.6.32-431或更高

查看系统的版本和内核:

cat /etc/issue 

uname -r

2)要将Docker安装到CentOS上,首先启用EPEL软件库

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

sudo rpm -ivh epel-release-6-8.noarch.rpm

2、安装docker

yum install docker-io

3、启动docker

service docker start

4、设置开机启动

chkconfig docker on

systemctl enable docker

5、将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。为此,使用这个命令:

usermod -a -G docker $USER 

退出,重新登录,以激活群组变更。

6、centos7安装最新版的docker

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

yum update

(2)卸载旧版本的 Docker

yum erase docker docker-common docker-client docker-compose

(3)添加 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

(4)安装新版本 Docker

yum install -y docker-engine

(5)安装完后设置为系统开机自动启动服务

systemctl enable docker.service

(6)启动服务

systemctl start docker

7、centos6安装新版的docker

(1)先安装1.7.1版本

#Centos6的1.7.1版本Docker在EPEL和Docker官方源提供,EPEL方便点

yum install epel-release -y

#docker-io才是1.7.1版本的,叫docker那个是1.5版本的

yum install docker-io -y

#下载1.9.1然后替换

curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1

chmod +x docker-1.9.1

sudo mv docker-1.9.1 /usr/bin/docker

service docker restart

(2)编译新版本

2.1)yum install git make -y

wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz

tar xzf go1.8.3.linux-amd64.tar.gz -C /usr/local

mkdir /usr/local/gopackage

2.2)vi /etc/profile

#在profile中加入下面的环境变量,PATH如果原来就有请自行合并

GOROOT=/usr/local/go

GOPATH=/usr/local/gopackage

PATH=$PATH:$GOROOT/bin:$GOPATH/bin

export GOROOT GOPATH PATH

source /etc/profile

2.3)#这儿会要你输密码,直接回车就行,docker移到了moby,不过依旧不影响

git clone https://git@github.com/docker/docker

cd docker

#要啥版本你自己看着切换

git checkout v1.13.1

make build

make binary

然后会在bundles目录下生成你版本号的目录,里面有binary-client和binary-daemon目录,前者是docker文件以及它的md5和sha256文件,后者是一堆程序以及它们的md5和sha256(可以删了)

2.4)找个地方丢着然后直接运行dockerd启动daemon然后使用docker来交互就行,原有的/etc/init.d/docker文件你需要删掉了,因为无法兼容新版本的启动方式

二、基本命令

1、搜索镜像

docker search <image>

如:docker search ubuntu12.10

NAME                        DESCRIPTION                                    STARS    OFFICIAL  AUTOMATED

mirolin/ubuntu12.10                                                        0

marcgibbons/ubuntu12.10                                                    0

mirolin/ubuntu12.10_redis                                                  0

chug/ubuntu12.10x32        Ubuntu Quantal Quetzal 12.10 32bit  base i...  0

chug/ubuntu12.10x64        Ubuntu Quantal Quetzal 12.10 64bit  base i...  0

docker search

2、下截镜像

docker pull <image>

如:docker pull chug/ubuntu12.10x64

3、查看本地拥有的镜像

docker images: 列出images

docker images -a :列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi  <image ID>: 删除一个或多个image

4、删除本地镜像

docker rmi

5、根据镜像创建并启动容器

docker run --name shell -i -t ubuntu:latest /bin/bash

5.1)参数说明:

--name:给容器的名称

-i:打开STDIN,用于控制台交互 ,表示可以interactive,可以交互

-t:打开终端,表示给容器tty终端

-d:后台运行。如果不设这个参数,容器运行完就退出

-p:端口映射:ip:port:contanter port

-v:冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径

5.2)例如:

docker run -p 7000:6379 --name redis-redisbloom redislabs/rebloom:latest

BF.RESERVE bloomfilter:user:black 0.0001 10000000

BF.RESERVE  {error_rate} {size}

docker run -d -p 5001:22 -p5002:80 -p5003:3306  --privileged=true -v /home/docker_data/hhht:/home/ --name centos-hhht -it centos  /bin/bash

6、退出容器

exit

7、进入正在运行的docker容器

1)docker attach db3 或者 docker attach d48b21a7e439 :db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID然后就进去了这个容器的ssh界面。但是它有一个缺点,只要这个连接终止,或者使用了exit命令,容器就会退出后台运行

2)docker exec -it db3 bash 或者 docker exec -it d48b21a7e439 bash :db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID

8、停止容器

docker stop 容器id

9、启运容器

docker start 容器id

10、删除容器

docker rm

11、列出本机的容器列表

docker ps

12、使用Dockerfile创建image:

docker build -t "sloan/centos-latest:v4" .

其中-t标记添加tag,指定新的镜像的用户信息。 "."Dockerfile所有的路径。

13、修改image的tag:

docker tag e5b5df13b85e sloan/centos-latest 

docker images sloan/centos-latest

14、上传镜像:

docker push sloan/centos-latest

15、保存Container到images

docker commit -a="sloan" -p=true -m="mongodb dir" e2e2e75ac08d

16、修改正在运行的容器端口映射

1)获取容器ip

docker inspect 容器名称 | grep IPAddress

2)增加端口映射

iptables -t nat -A DOCKER -p tcp --dport 主机端口 -j DNAT --to-destination 容器IP:容器端口

firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

17、查看docker容器启动日志

docker logs -f -t --since="2017-05-31" --tail=10 mysql-node1

三、docker 网络设置

1、docker网络介络

Docker安装后,默认会创建下面三种网络类型

$ docker network ls

NETWORK ID    NAME        DRIVER      SCOPE

9781b1f585ae    bridge      bridge      local

1252da701e55    host        host        local

237ea3d5cfbf    none        null        local

2、启动 Docker的时候,用 --network 参数,可以指定网络类型

docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash

3、bridge:桥接网络

默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了

4、none:无指定网络

使用 --network=none ,docker 容器就不会分配局域网的IP

5、host: 主机网络

使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。

例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

6、创建自定义网络:(设置固定IP)

启动Docker容器的时候,使用默认的网络是不支持指派固定IP的,如下

docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash

6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6

docker: Error response from daemon: User specified IP address is supported on user defined networks only.

步骤1: 创建自定义网络

docker network create --subnet=172.18.0.0/16 mynetwork

~ docker network ls

NETWORK ID    NAME        DRIVER      SCOPE

9781b1f585ae    bridge      bridge      local

1252da701e55    host        host        local

4f11ae9c85de    mynetwork      bridge      local

237ea3d5cfbf    none        null        local

步骤2: 创建Docker容器

docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

docker run -itd --privileged=true -v /data/docker/data/node1:/home/ -v /data/docker/data/common:/home/common --name node1 --net mynetwork --ip 172.18.0.11 manfred/centos7-ssh /bin/bash

四、构建docker镜像

1、docker commit创建镜像

docker commit -a="sloan" -p=true -m="mongodb dir" e2e2e75ac08d

2、Dockerfile创建镜像

1)创建dockerFile文件,内容如下

#基础镜像,指构建本镜像是在哪个镜像上创建的

FROM centos

#创建镜像作者名称

MAINTAINER Rico

#添加文件到镜像中

ADD pcre-8.37.tar.gz /usr/local/src

ADD nginx-1.9.3.tar-gz /usr/local/src

#RUN 执行脚本之类的

RUN yum install -y wget gcc gcc-c++ make openssl-devel

RUN useradd -s /sbin/nologin -M www

#WORKDIR 设置操作目录,即工作目录

WORKDIR /usr/local/src/nginx-1.9.3

RUN ./configure --prefix=usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/prce-8.37 &&make && make install

RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#VOLUME

VOLUME

#EXPOSE 打开端口

EXPOSE 80

ENV PATH= /usr/local/nginx/sbin;$PATH

2)构建 docker build -t mynginx:tag dockerfile

五、修改Docker默认镜像和容器的存储位置

一共四种方法可以修改docker的存储位置

1、软链接方法

1)停止docker 服务

service docker stop

2)备份数据到新的存放路径

cp -r /var/lib/docker/* /mnt/docker

3)修改备份 /var/lib/docker 路径

mv /var/lib/docker{,.bak}

4)创建软连接

ln -s /mnt/docker /var/lib/docker

5)启动docker

service docker start

2、修改镜像和容器的存放路径

指定镜像和容器存放路径的参数是--graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可。

Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致,

在 Ubuntu 中的位置是:/etc/default/docker,在 CentOS 中的位置是:/etc/sysconfig/docker。

如果是 CentOS6 则添加下面这行:

OPTIONS=--graph="/root/data/docker" --selinux-enabled -H fd://

如果是 Ubuntu 则添加下面这行(因为 Ubuntu 默认没开启 selinux):

OPTIONS=--graph="/root/data/docker" -H fd://# 或者DOCKER_OPTS="-g /root/data/docker"

最后重新启动,Docker 的路径就改成 /root/data/docker 了。

centos7下,也可以

修改docker.service文件,使用-g参数指定存储位置

vi /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd --graph /new-path/docker

// reload配置文件

systemctl daemon-reload

// 重启docker

systemctl restart docker.service

3、如果docker是1.12或以上的版本,可以修改(或新建)daemon.json文件。修改后会立即生效,不需重启docker服务。

vim /etc/docker/daemon.json

{"registry-mirrors": ["http://7e61f7f9.m.daocloud.io"],"graph": "/new-path/docker"}

六、常用镜像

1、安装centos

1)搜索centos镜像

docker search centos

2)pull centos

docker pull centos

3)运行镜像

docker run -d -p 5001:22 -p5002:80 -p5003:3306  --privileged=true -v /home/docker_data/hhht:/home/ --name centos-hhht -it centos  /bin/bash

参数说明:

--name:给容器的名称

-i:

-d:后台运行

-p:端口映射:ip:port:contanter port

-v:冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径

4)退出

exit

5)重新启动容器

docker start 容器id

6)主机配置端口转发

# 将80端口的流量转发至8080

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080

# 将80端口的流量转发至

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1

# 将80端口的流量转发至192.168.0.1的8080端口

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080

7)安装常用工具

(A)网络配置工具

yum install -y net-tools

(B)service命令

yum install initscripts -y

8)环境变量设置

如果/etc/profile设置了环境变量再次进入容器时环境变量会失效,解决办法是将环境变量设置在

/root/.bashrc

2、安装SSH

2.1)安装

yum install passwd openssl openssh-server -y

yum install -y openssh-server* openssh-client*  libmysqlclient*

ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N ''

2.2)修改SSH配置文件

vi /etc/ssh/sshd_config

RSAAuthentication yes #启用 RSA 认证

PubkeyAuthentication yes #启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)

PermitRootLogin yes #root能使用ssh登录

UsePAM yes 改为 UsePAM no

UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no

2.4)

sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config

sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config

2.5)开启ssh服务

/usr/sbin/sshd -D &

2.6)常见错误

(1)PTY allocation request failed on channel 0

解决:  rm -rf /dev/ptmx

mknod /dev/ptmx c 5 2

好像不用以下的

chmod 666 /dev/ptmx

umount /dev/pts

rm -rf /dev/pts

mkdir /dev/pts

mount /dev/pts

3、制作镜像

docker commit ed623c6f55b9 manfred/centos7-ssh

4、安装mysql版本7以下

(1)例子一mysql版本7与8

docker run --name mysql -p 36007:3306 -e MYSQL_ROOT_PASSWORD=my-secret-p -v /data/docker/mysql/data:/var/lib/mysql -v /data/docker/mysql/conf:/etc/mysql/conf.d -d mysql

(2)例子二

docker run --name mysql-node1 --net mynetwork --ip 172.18.0.6 -e MYSQL_ROOT_PASSWORD=85595811 -v $DOCKER_RUNTIME/data/docker/data/mysql-node1/datadir:/var/lib/mysql -v $DOCKER_RUNTIME/data/docker/data/mysql-node1/conf:/etc/mysql/conf.d -d mysql

5、安装mysql5

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/LOGS:/LOGS -v $PWD/DATA:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

参数说明:

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

-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码

七、创建私有仓库http://blog.51cto.com/welcomeweb/1698778

1、运行私有服务

docker run -d --hostname localhost --name mydocker-registry -v /app/docker/registry:/docker/images -p 5000:5000 registry

参数说明:

-v /app/docker/registry:/docker/images :将本地目录/app/docker/registry挂到私服务仓库容器/docker/images下

–privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误

2、在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

如果有这个文件就在时面加一条

{ "insecure-registries":["192.168.2.200:5000"] }

3、在/etc/sysconfig/docker修改

OPTIONS='--insecure-registry 192.168.0.179:5000'    #CentOS 7系统

other_args='--insecure-registry 192.168.0.179:5000' #CentOS 6系统

4、重启docker

service docker  restart  #

5、推送镜像到仓库

使用tag命令修改标签

docker tag centos localhost:5000/centos

推送到仓库

docker push localhost:5000/tomcat

6、拉取镜像

docker pull 192.168.0.153:5000/busybox

7、查看仓库的镜像

http://192.168.2.200:5000/v2/_catalog

八、常用的镜像安装

1、Gitlab安装

(1)安装

sudo docker run --detach \

--hostname localhost \

--publish 1443:443 --publish 3003:3003 \

--name cn-gitlab \

--restart always \

--volume /data/gitlab/config:/etc/gitlab \

--volume /data/gitlab/logs:/var/log/gitlab \

--volume /data/gitlab/data:/var/opt/gitlab \

twang2218/gitlab-ce-zh:latest

(2)修改端口

1 修改nginx端口

sudo vi /etc/gitlab/gitlab.rb

nginx['listen_port'] = 8088

sudo vi /var/opt/gitlab/nginx/conf/gitlab-http.conf

server {

  listen *:8088;

2 修改unicorn端口(可以不修改)

sudo vi /etc/gitlab/gitlab.rb

unicorn['port'] = 8083

sudo vi /var/opt/gitlab/gitlab-rails/etc/unicorn.rb

listen "127.0.0.1:8083", :tcp_nopush => true

3 保存配置,重启。

sudo gitlab-ctl reconfigure

sudo gitlab-ctl restart

sudo gitlab-ctl status

4 ip:8088访问成功。(重启服务有延时,耐心等待一会,如果是centos可能会打不开网页,防火墙里面放开8081端口即可)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 一、安装docker 1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来...
    大胡子歌歌阅读 1,665评论 0 1
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,693评论 0 9
  • Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...
    执笔梦一场阅读 3,184评论 2 10
  • 下载mysql最新的mysql 镜像 docker pull mysql 为docker mysql创建数据目录、...
    书简的花果山阅读 286评论 0 0
  • 这次一起巡察的2个单位跟上次的一个乡镇和一个大局不一样,虽然是说小,但从外围和对接观察的一些现象所得,对这...
    红粉轻盈阅读 148评论 0 0