docker 由浅入深

首先,创建并运行 一个新容器是,docker run命令。
而,运行启动一个 已经停止的 容器docker start 命令

1. 下载vmware

步骤略。

2. 下载centos

步骤略。

3. 安装centos到vmware

步骤略。

4. 安装ifconfig命令

如果已安装的centos有这个命令,跳过这步。
(1)yum search ifconfig,可以发现在net-tools.x86_64这个包里;
(2)yum install net-tools.x86_64,安装即可。

5. 设置虚拟机网络连接为桥接模式

(1)桥接模式:虚拟机与主机,相当于两台机器,虚拟机也会分配一个ip;
(2)NAT模式:虚拟机共用主机的网络连接;
配置方式如下:
这里写图片描述
这里写图片描述
这里写图片描述

6. 设置固定ip

(1)修改/etc/sysconfig/network文件,添加网关GATEWAY,如果不知道网关可以查看主机的网关地址:
这里写图片描述
(2)修改/etc/sysconfig/network-scripts/ifcfg-eth0文件(ifcfg-<eth0>这里可能每台机器不一样):
这里写图片描述

7. 安装docker

(本处以centos7示例,其它系统请自行参阅相关资料)

7.1 直接安装

(1)yum install Docker,安装docker
(2)service docker start,启动docker服务(如果没有service命令,请使用systemctl start docker.service)
(3)chkconfig docker on,让它随系统启动自动加载

7.2 通过阿里云安装

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

8. 搜索镜像

docker search centos
这里写图片描述

9. 下载镜像

docker pull docker.io/centos 这步有点慢,请耐心等待
这里写图片描述
如果非常慢,可以配置阿里镜像加速:
使用配置文件 /etc/docker/daemon.json(没有时新建该文件)
{
“registry-mirrors”: [“<your accelerate address>”]
}
重启Docker Daemon就可以了。
其中,your accelerate address需要注册阿里云账号申请,具体参考https://yq.aliyun.com/articles/29941

10. 查看镜像

docker images
这里写图片描述

11. 使用镜像创建容器

(1)镜像,是一个只读的模板,用来创建docker容器。
(2)容器,用来运行应用的地方。
docker run -i -t docker.io/centos /bin/bash
可以使用docker run --help命令查看docker run参数的意思,这里的-i, --interactive表示保持标准输入打开,即交互模式,-t表示分配一个终端,会分配一个密码随机的root用户。
这里写图片描述
注意:此处如果报如下错误,加上参数--privileged=true即可。
docker: Error response from daemon: Container command could not be invoked..
这里写图片描述
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
docker run的参数:
- a=map[]: 附加标准输入、输出或者错误输出
- -c=0: 共享CPU格式(相对重要)
- -cidfile=“”: 将容器的ID标识写入文件
- -d=false: 分离模式,在后台运行容器,并且打印出容器ID
- -e=[]:设置环境变量
- -h=“”: 容器的主机名称
- -i=false: 保持输入流开放即使没有附加输入流
- -privileged=false: 给容器扩展的权限
- -m=“”: 内存限制 (格式:, unit单位 = b, k, m or g)
- -n=true: 允许镜像使用网络
- -p=[]: 匹配镜像内的网络端口号 支持格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
- -rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)
- -t=false: 分配一个伪造的终端输入
- -u=“”: 用户名或者ID
- -dns=[]: 自定义容器的DNS服务器
- -v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷
- -volumes-from=“”: 挂载容器所有的卷
- -entrypoint=“”: 覆盖镜像设置默认的入口点
- -w=“”: 工作目录内的容器
- -lxc-conf=[]: 添加自定义-lxc-conf=“lxc.cgroup.cpuset.cpus = 0,1″
- -sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)
- -expose=[]: 让你主机没有开放的端口
- -link=“”: 连接到另一个容器(name:alias)
- -name=“”: 分配容器的名称,如果没有指定就会随机生成一个 ,容器的名称是唯一的。
- -P=false: Publish all exposed ports to thehost interfaces 公布所有显示的端口主机接口

12. 查看容器

docker ps
无参,查看当前正在运行的容器
-a,查看所有的容器,包含正在运行及运行过的容器
-l,查看最近一次运行的容器
这里写图片描述

13. 再次启动容器

docker start/stop/restart/attach <containerId>
docker start <containerId>,再次启动某个容器,包含历史容器
-i,可以直接进入交互模式(相当于先start再attach)
docker attach <containerId>,进入一个正在运行的容器,注意必须是正在运行的
这里写图片描述

14. 退出容器而不关闭

快捷键:CTRL+P+Q
这里写图片描述

15. 生成新的镜像

docker commit [OPTION] <containerId> < newImageName>
把一个容器变成一个镜像。
这里写图片描述

16. 删除容器(镜像)

docker rm <containerId> 删除指定容器
docker rmi <imageId> 删除一个或多个image
docker ps -a -q | xargs docker rm 删除所有的容器
这里写图片描述

17. 持久化容器

docker export <containerId> > /tmp/export_container.tar
这里写图片描述

18. 持久化镜像

docker save <imageId>> /tmp/save_image.tar
这里写图片描述

19. 导入持久化的容器

cat /tmp/export_container.tar | docker import - <imageName>:<imageTag>
注意,导入之后是生成新的镜像而不是容器!
这里写图片描述

20. 导入持久化的镜像

docker rmi <imageId> 删除镜像
docker load < /tmp/save_image.tar 加载镜像
docker tag <imageId> load:tag 为镜像打TAG
这里写图片描述
两种方式的比较:
导出容器再导入为镜像的方式会丢失历史信息,而保存镜像再加载为镜像的方式不会丢失历史和层,可以做到层回滚,从下图两者的大小亦可看出些许端倪。
这里写图片描述

21. ssh方式登录容器

(1)yum install -y penssl openssh-server,安装ssh服务端命令
这里写图片描述
(2)/usr/sbin/sshd,运行sshd,此时会报如下错误
这里写图片描述
(3)通过以下三条命令生成相应的key
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 ”
这里写图片描述
(4)修改/etc/ssh/sshd_config中的UsePrivilegeSeparation为no,UsePAM为no
sed -i “s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g” /etc/ssh/sshd_config
sed -i “s/UsePAM.*/UsePAM no/g” /etc/ssh/sshd_config
这里写图片描述
(5)重新启动sshd
/usr/sbin/sshd
这里写图片描述
(6)修改容器的root密码
passwd
这里写图片描述
(7)通过ssh工具连接镜像
可以成功连入!
这里写图片描述
这里写图片描述
(8)保存刚才的容器为新的镜像
docker commit 4bdb51b342a1 tt/centos-ssh
这里写图片描述
(9)以新的镜像来运行一个容器
docker run -it -p 50002:22 tt/centos-ssh /bin/bash
/usr/sbin/sshd,启动后运行下这个命令
这里写图片描述
(10)在主机运行容器内部的命令
docker exec dc2cf45e2a59 /usr/sbin/sshd
这里写图片描述
(11)也可以给容器单独配置一个ip,脚本大致如下:

#!/bin/sh

MYIP=10.1.110.xx
GW=10.1.110.1
ETH=p4p1

brctl addbr br0
ip link set br0 up
ip addr add $MYIP/24 dev br0
ip addr del $MYIP</span>/<span class="hljs-number">24</span> dev <span class="hljs-variable">$ETH
brctl addif br0 $ETH
#ip route del default
ip route add default via $GW dev br0

iptables -A FORWARD -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i br0 ! -o br0 -j ACCEPT
iptables -A FORWARD -i br0 -o br0 -j ACCEPT

#run twice
#pipework br0 web4 10.1.110.77/24
#ip netns exec 11849 ip route add default via 10.1.110.1 dev eth1

大致原理如下:
这里写图片描述

22.容器中安装java

yum search jdk
yum install -y Java-1.8.0-openjdk.x86_64

23.容器中安装文件上传下载工具rz/sz

yum install -y lrzsz.x86_64
这里写图片描述

24.容器中安装tomcat

(1)从官网上下载下来tomcat,http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
(2)上传压缩包到容器中并解压
rz -be,上传文件
tar -zxvf apache-tomcat-8.5.9.tar.gz
这里写图片描述
(3)把安装好的容器生成新的镜像
docker commit 05752c25d949 tt/centos-tomcat
这里写图片描述
(4)用新的镜像启动并设置端口映射
docker run -it -p 8888:8080 --privileged=true tt/centos-tomcat /bin/bash
这里写图片描述
(5)容器内启动tomcat
./startup.sh
这里写图片描述
(6)访问
如果正常出现以下画面说明配置成功。
这里写图片描述

25.安装Nginx

(1)先安装rpm依赖库
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
这里写图片描述
(2)安装nginx
yum install nginx -y
这里写图片描述
(3)启动nginx
/usr/sbin/nginx
这里写图片描述
(4)现在还访问不了,因为没有设置端口映射
(5)保存为新的镜像
docker commit 6686cc8a7096 tt/centos-nginx
这里写图片描述
(6)重新启动一个新的容器,设置端口映射为80:80
docker run -it --privileged=true -p 80:80 tt/centos-nginx /bin/bash
/usr/sbin/nginx,进入容器之后启动nginx
这里写图片描述
(7)在浏览器访问,直接输入ip,默认为80端口
看到以下画面说明nginx安装成功了
这里写图片描述

26. 配置nginx到tomcat的映射

(1)在tomcat的webapps目录下加一个目录及文件,docker/index.html
(2)启动tomcat,默认为8080端口
/root/soft/apache-tomcat-8.5.9/bin/startup.sh
这里写图片描述
(3)修改nginx配置文件,转发到tomcat
cd /etc/nginx/
vi nginx.conf

server{
      location /docker/  {
          proxy_pass   http://127.0.0.1:8080/docker/;
      }
}

这里写图片描述
(4)重启nginx
/usr/sbin/nginx -s reload
(5)浏览器访问
出现以下画面,说明转发成功。
这里写图片描述

27. 数据卷和数据卷容器

27.1 数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,数据卷的使用, 类似于 Linux 下对目录或文件进行 mount。
(1)新建一个目录作为数据卷使用
在root目录下创建一个新的目录volume,在volume目录下再创建一个vv文件
这里写图片描述
(2)启动一个容器并挂载上述目录
docker run -d --name=volume -v /root/volume:/tmp/volume -it --privileged=true tt/centos-tomcat /bin/bash 使用-v可以挂载一个本地的目录到容器中作为数据卷。注意,这里加上--privileged=true参数,否则有可能导致容器内部没有权限操作
docker exec -it volume /bin/bash 进入容器
cd tmp/volume/ 查看tmp下面是否有volume目录
ls 查看volume目录下是否包含vv文件
可见已经把/root/volume挂载到了容器的/tmp/volume目录,且包含数据。
这里写图片描述

27.2 数据卷容器

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。
数据卷容器,其实就是一个正常的容器, 专门用来提供数据卷供其它容器挂载的。
(1)启动一个数据卷容器
docker run -d --name=volume -v /root/volume:/tmp/volume -it --privileged=true tt/centos-tomcat /bin/bash
(2)挂载数据卷容器中的数据卷
docker run -it --name=volume1 --volumes-from volume --privileged=true tt/centos-test:test /bin/bash --volumes-from从volume中挂载数据卷到volume1中。
这里写图片描述
(3)从其它挂载了数据卷的容器挂载数据卷
docker run -it --name=volume2 --volumes-from volume1 --privileged=true tt/centos-test:test /bin/bash 从volume1中挂载数据卷到volume2中,注意volume1和volume的区别。

27.3 利用数据卷容器备份、恢复

(1)备份
docker run --name=backup --volumes-from volume -v $(pwd):/backup --privileged=true tt/centos-test:test tar cvf /backup/backup.tar /tmp/volume
启动一个名字为backup的容器,从volume加载数据卷,并把当前目录挂载为容器的数据卷,对应到容器的/backup目录,然后使用tar命令把容器中的目录/tmp/volume压缩为/backup/backup.tar文件,也就是压缩到了主机的当前目录。
这里写图片描述
(2)恢复
docker run -dit -v /root/recovery:/tmp/volume --name=recovery --privileged=true tt/centos-test:test /bin/bash 启动一个数据卷容器recovery,并把主机的/root/recovery目录挂载为容器的/tmp/volume目录。
这里写图片描述
docker run --volumes-from recovery -v $(pwd):/backup --privileged=true tt/centos-test:test tar xvf /backup/backup.tar 启动一个容器并挂载上述的recovery容器的数据卷,并把主机的当前目录(与之前压缩的是同一个目录,因为压缩包在这个目录中)挂载到容器中,然后利用tar命令解压压缩包,因为一进入容器是在/根目录,所以解压的文件会放在/tmp/volume中,也就对应与主机的/root/recovery目录,所以查看主机的/root/recovery可查看到文件,查看容器的/tmp/volume目录也可查看到文件。
这里写图片描述

28. 网络

28.1 端口映射

docker run -it -p 8080:8080 tt/centos-tomcat /bin/bash 使用-p(小写)指定要映射的端口,可多次使用-p参数指定多个端口映射,注意-P(大写)是随机分配端口。
这里写图片描述

28.2 容器互联

(1)启动容器tomcat
docker run -it --privileged=true --name=tomcat tt/centos-tomcat /bin/bash 启动容器tomcat,注意,这里并没有设置端口映射。
这里写图片描述
(2)启动容器nginx
docker run -it --privileged=true --name=nginx -p 80:80 --link tomcat:tomcat tt/centos-nginx /bin/bash 启动容器nginx,注意,这里只映射80端口,并连接到tomcat容器。
这里写图片描述
(3)修改nginx配置
nginx添加如下配置,访问/docker/时转到http://tomcat:8080/docker/地址,其中,tomcat为上述连接的容器。

server{
      location /docker/  {
          proxy_pass   http://tomcat:8080/docker/;
      }
}

这里写图片描述
(4)启动(或重启)nginx
(5)浏览器访问
若出现如下画面(前提是tomcat下有docker这个工程并包含index.html文件),说明端口映射到nginx成功,且nginx与tomcat连接成功,且nginx与tomcat转发成功。
这里写图片描述

转自

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值