docker使用总结

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 -

7.3 修改镜像地址为中国地区

为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
修改保存后重启 Docker 以使配置生效。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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/24 dev $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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

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/;
      }
}
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述 
(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/;
      }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tangtong1/article/details/53556129

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值