生产环境部署与协同开发-Docker(原创超全)

    1. 关闭防火墙
  1. systemctl stop firewalld.service
  1. 关闭SELinux
  1. vim /etc/selinux/config
  1. 查看yum支持的包
  2. 并安装docker引擎
  1. yum list
  2. yum install -y docker
  1. 启动docker
  2. 设置docker自启动
  3. 测试docker是否安装成功?
  1. systemctl start docker
  2. systemctl enable docker
  3. docker run hello-world
  • 镜像命令
    1. 获取镜像名叫cento的镜像
  1. docker pull centos
  1. 查看主机已有的镜像
  2. 镜像搜索
  1. docker images
  2. docker search cento
  1. 删除镜像(3)
  1. docker rmi 5d0da3dc9764
  2. docker rmi 5d
  3. docker rmi docker.io/centos
  • 容器命令
    1. 创建一个容器
    2. 查看未开启的镜像
    3. 启动容器
  1. docker create -it centos
  2. docker ps -a
  3. docker start f63400dfc24a
  1. 创建并启动容器(docker不是容器,是管理容器的工具)
  1. docker run -it centos /bin/echo "hello world"
  1. 以守护态的形式在后台运行
  1. docker run -d centos /bin/bash -c "while i <= 4 ;do echo hello ; sleep 1 ;done"

  1. 获取容器信息
  2. 获取容器启动时输出的信息
  3. 终止容器
  4. 重开起容器
  5. 重启restart 换 start
  1. docker ps
  2. docker logs cb
  3. docker stop cb
  4. docker start cb
  1. 进入容器里边
  2. 退出
  1. docker exec -it f6 /bin/bash
  2. exit
  1. 删除容器
  1. docker rm cb


 

卡片2


 

  • 其他命令
    1. docker 日志帮助
    2. 查看容器日志
  1. docker log -help
  2. docker top f6
  1. 从容器拷贝文件到主机上
  1. docker exec -it f6 /bin/bash
  2. ls
  3. cd opt/
  4. vi a.info
  5. exit
  6. cd /opt
  7. docker cp f6:/opt/a.info /opt
  • java环境
    1. 查看java镜像
    2. 下载jdk
    3. 运行jdk镜像
  1. docker search openjdk:11
  2. docker pull openjdk:11
  3. docker run openjdk:11 java -version
  • docker实践_安装Tomcat
    1. 查看tomcat镜像
    2. 下载tomcat镜像
    3. 查看所有镜像
    4. 启动Tomcat容器
  1. docker search docker.io/tomee
  2. docker pull docker.io/tomee
  3. docker images
  4. docker run --name my_tomcat -d -p 9090:8080 docker.io/tomee

  1. 查看防火墙
  2. 关闭防火墙
  3. 开启防火墙
  1. firewall-cmd --state
  2. systemctl stop firewalld.service
  3. systemctl start firewalld.service
  • docker 实践_安装Mysql
    1. 查看
    2. 下载
    3. 启动
  1. docker search mysql:5.7
  2. docker pull docker run -d -p 3036:3036 docker.io/migs/mysql-5.7
  3. docker run --name mysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 docker.io/migs/mysql-5.7

卡片3

  • docker数据管理_配置数据卷
    1. 先查看并关停已有的容器(先暂停再删除)
    2. 先创建一下Tomcat并进入再找到容器中webapps的路径
    3. 退回并删除刚刚创建的,重新创建并添加参数-v 将主机的本地绝对路经挂载到刚刚copy下来的容器的路经下面
    4. 并重启
    5. 在网站上输入本机的IP以及文件所在路径
  1. docker stop 90
  2. docker rm 90
  3. docker run -d --name my_tomcat -p 6060:
  4. 80 docker.io/tomee
  5. docker exec -it 40 /bin/bash
  6. 80
  7. cd webapps
  8. pwd
  9. exit
  10. docker stop 40
  11. docker rm 40
  12. docker run -d --name my_tomcat -p 6060:8080 -v /opt/webapps:/usr/local/tomee/webapps docker.io/tomee
  13. cd /opt
  14. ll
  15. cd webapps
  16. mkdir test
  17. cd test
  18. vim index.html
  19. cd ..
  20. cd ..
  21. docker restart 15
  • docker数据管理_数据卷容器
  1. docker volume COMMAND
  2. docker volume ls
  3. docker volume prune
  4. docker volume create test_web
  5. docker volume ls
  6. docker volume inspect test_web
  7. cd /var/lib/docker
  8. pwd
  9. ll
  10. cd volumes
  11. ll
  12. cd test_web/
  13. ll
  14. cd -data
  15. pwd
  16. docker run -d --name mytomcat -p 6060:8080 -v test_web:/user/local/tomee/webapps docker.io/tomee
  17. mkdir test
  18. cd test/
  19. vim index.html
  20. docker restart d5

查看数据卷命令

查看数据卷信息(路径)

查看docker存放文件的地方里的内容

这就是docker存放文件的路径

进入volume后再进入里面存数据的地方

创建文件并在浏览器上运行

出现这个问题

原因分析:

写错了路径

  • Mysql数据持久化(上)
  1. docker run -d -p 3036:3306 -v /opt/mysql/conf.d -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_pASSWORD=123456 --name my-mysql docker.io/migs/mysql-5.7

第一次创建了这个dockerMysql容器,但始终没法运行

删了重弄

查看日志(不被允许,权限受限制)

删了重弄,这次加个 --privileged

然后就好了进容器里了

卡片4

  • Mysql数据持久化(下)
  1. docker exec -it e2 /bin/bash
  2. mysql -uroot -p
  3. show databases;
  4. create database test;
  5. use test;
  6. create table dog;
  7. insert into dog value (1,"tom");
  8. select *from dog;
  9. exit
  10. exit
  11. docker ps
  12. docker stop e2
  13. docker rm e2
  14. cd /opt
  15. ll
  16. cd mysql
  17. ll
  18. cd data
  19. ll
  20. docker run -d -p 3036:3306 -v /opt/mysql/conf:/etc/mysql/conf.d -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql1 docker.io/google/mysql
  21. docker exec -it a1 /bin/bash
  22. mysql -uroot -p
  23. show databases;
  24. use test;
  25. select * from dog ;

问题1:

解决方式:

vi /etc/sysctl.conf

#新增一行

net.ipv4.ip_forward=1

#执行命令

systemctl restart network

注释呀,你写进去,注释掉,那不是相当于没写吗

问题2:找不到镜像

换个源

2.匿名挂载

  1. docker run -d --name my_tomcat -p 8081:8080 -v /usr/local/tomcat/webapps tomee

2.数据卷挂载还可以指定权限

  1. docker run -d -P --name tomcat -v my-nginx:/etc/nginx:ro tomcat
  2. docker run -d -P --name tomcat -v my-nginx:/etc/nginx:rw tomcat
  • 构建镜像

构建centos镜像

  1. vim Dockerfile
  2. vim(3~8) 里
  3. #基础镜像
  4. FROM centos
  5. #维护者信息
  6. MAINTAINER baizhan<baizhan@163.com>
  7. #当容器启动的时候执行的命令
  8. CMD echo "Hello Dockerfile"
  9. docker build -t test:v1 .

  1. docker images
  2. docker run test:v1

构建java镜像

  1. cd /opt
  2. ll
  3. vim Dockerfile
  4. # 基础镜像
  5. FROM java:8
  6. # 维护者
  7. MAINTAINER baizhan<baizhan@163.com>
  8. # 工作目录 切换目录
  9. WORKDIR /opt
  10. # 构建镜像的时候执行的命令
  11. RUN mkdir abc
  12. docker build -t test:v1 .
  13. docker run -it test:v1
  14. ls

run 命令创建的中间镜像会缓存,会在下次构建中使用,如果不想使用这些缓存镜像,可以指定

--no-cache参数

卡片5

  • FROM/MAINTAINER/RUN/ADD/CMD/

tar -cvf info.tar a.info b.info

vim Dockerfile

# 基础镜像

FROM java:8

# 维护者

MAINTAINER baizhan<baizhan@163.com>

# 工作目录 切换目录

WORKDIR /opt

# 构建镜像的时候执行的命令

RUN mkdir abc

#将本地文件添加到容器内

ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压

#构建成功后执行的命令

CMD echo "This is a test." | wc - #wc的用法

docker build -t test:v3

docker run -it test:v3

卡片6

  • ENV

FROM java:8

# 维护者

MAINTAINER baizhan<baizhan@163.com>

# 工作目录 切换目录

WORKDIR /opt

# 构建镜像的时候执行的命令

RUN mkdir abc

#将本地文件添加到容器内

ADD ./apache-tomcat-9.0.76.tar.gz /opt

#构建成功后执行的命令

#CMD echo "This is a test." | wc -

    • (额外仿照jdk对Tomcat进行相关操作)
    • linux 解压和压缩文件
    • tar -zxvf jdk-8u201-linux-x64.tar.gz -c /usr/local #解压文件
    • tar -zcvf jdk-8u201-linux-x64.tar.gz jdk-8u201-linux-x64 #压缩文件

docker build -t test2:v1 .

docker run -it test2:v1

ls

cd apache-tomcat-9.0.76

ls

cd bin

./startup.sh #在bin路径下确实可以运行tomcat

但如果返回到/opt 路径下就不行了(如果不配置环境变量的话)

所以操作如下:

# 基础镜像

FROM java:8

# 维护者

MAINTAINER baizhan<baizhan@163.com>

# 工作目录 切换目录

WORKDIR /opt

# 构建镜像的时候执行的命令

RUN mkdir abc

#将本地文件添加到容器内

ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压

#构建成功后执行的命令

CMD echo "This is a test." | wc - #wc的用法

#环境变量

ENV TOMCAT_HOME=/opt/apache-tomcat-9.0.76 #设置了一个Tomcat的home路径

ENV PATH=$PATH:$TOMCAT_HOME/bin #将该Tomcat路径加到Path路径里

(permission denied)

  • EXPOSE

# 基础镜像

FROM java:8

# 维护者

MAINTAINER baizhan<baizhan@163.com>

# 工作目录 切换目录

WORKDIR /opt

# 构建镜像的时候执行的命令

RUN mkdir abc

#将本地文件添加到容器内

ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压

#构建成功后执行的命令

CMD echo "This is a test." | wc - #wc的用法

#环境变量

ENV TOMCAT_HOME=/opt/apache-tomcat-9.0.76 #设置了一个Tomcat的home路径

ENV PATH=$PATH:$TOMCAT_HOME/bin #将该Tomcat路径加到Path路径里

#对外暴露端口

EXPOSE 8080

docker run -it -p 8080:8080 #绑定暴露的对外端口号


 

  • VOLUMN

VOLUME /data #一个卷可以存在于一个或多个容器的指定目录

  • ONBUILD

cd /opt

mkdir abc

cd abc

vim Dockerfile

FROM centos

WORKDIR /data

ONBUILD RUN mkdir test

docker build -t test3:v1 .

docker run -it test3:v1

ls #没有test 文件, 单纯一个镜像不作操作,只有别人继承它的时候才会作用

exit

mkdir d

cd d

vim Dockerfile

FROM test3:v1

docker build -t test3:v2 .

docker run -it test3:v2

ls #有test文件

  • CMD和ENTRYPOINT的区别

vim Dockerfile

#基础镜像

#基础镜像

from centos

#启动容器运行命令

CMD ["ls" , "-a"]

docker build -t test4:v1 .

docker run -it test4:v1

docker run -it test4:v1 ls -l #对CMD的指令进行替换

vim Dockerfile

#基础镜像

#基础镜像

from centos

#启动容器运行命令

ENTRYPOINT ["ls" , "-a"]

docker build -t test4:v2

docker run -it test4:v2 -l #对ENTRYPOINT的指令进行追加

  • 构建tomcat 的镜像

docker search tomcat |wc -l

tar -zxvf apache-tomcat-9.0.76.tar.gz

cd apache-tomcat-9.0.76

cd bin

ls #查看到有startup.sh文件

vim Dockerfile

#基础镜像

#基础镜像

FROM openjdk:11

#维护者

MAINTAINER baizhan

#将本地文件添加到容器内

ADD ./apache-tomcat-9.0.76.tar.gz /usr/local

#设置工作目录

WORKDIR /usr/local

#设置环境变量

ENV TOMCAT_HOME=/usr/local/apache-tomcat-9.0.76

ENV PATH=$PATH:$TOMCAT_HOME/bin

#保留端口

EXPOSE 8080

#启动容器运行命令

CMD startup.sh && tail -F /usr/local/ apache-tomcat-9.0.76/bin/catalina.bat

docker build -t tomcat:1.0 . # " . "代表Dockerfile文件和该命令在同一个目录

docker run --name tomcat -d -p 8080:8080 tomcat:1.0 #运行刚刚创建的镜像

卡片7

  • docker0 详解

ifconfig

#看到:

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:58:9b:bc:66 brd ff:ff:ff:ff:ff:ff

inet172.17.0.1/16 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:58ff:fe9b:bc66/64 scope link

valid_lft forever preferred_lft forever

57: vethc23b124@if56: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether 12:64:29:59:42:ea brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::1064:29ff:fe59:42ea/64 scope link

valid_lft forever preferred_lft forever

docker run --name mytomcat -d -p 8080:8080 docker.io/tomcat

docker exec -it tomcat /bin/bash

ip addr

问题:没办法使用ifconfig 和ip addr 命令

问题解决:(阉割版的Tomcat,纯净的镜像)

在容器里使用:

apt-get update

apt install net-tools

ifconfig

root@0a5a85d262e4:/usr/local/tomcat# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0

inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>

ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

RX packets 3277 bytes 10820785 (10.3 MiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 3214 bytes 181688 (177.4 KiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

#出现172.17.0.2

  • evth-pair(容器通过这个技术分配IP)

docker run --name tomcat3 -d -p 9090:8080 docker.io/tomee

docker exec -it mytomcat ping tomcat3

[root@localhost opt]# docker exec -it mytomcat ping tomcat2

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:290: starting container process caused "exec: \"ping\": executable file not found in $PATH"

#报错

docker exec -it tomcat3 /bin/bash

ifconfig

root@80b82ebc2d88:/usr/local/tomee# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet172.17.0.4 netmask 255.255.0.0 broadcast 0.0.0.0

inet6 fe80::42:acff:fe11:4 prefixlen 64 scopeid 0x20<link>

ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)

RX packets 4075 bytes 30095862 (30.0 MB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 3506 bytes 194772 (194.7 KB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

#出现172.17.0.4

61: veth9f3b85c@if60: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether be:aa:d7:25:26:70 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::bcaa:d7ff:fe25:2670/64 scope link

valid_lft forever preferred_lft forever

65: veth1224aaa@if64: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether da:73:51:80:e1:6a brd ff:ff:ff:ff:ff:ff link-netnsid 2

inet6 fe80::d873:51ff:fe80:e16a/64 scope link

valid_lft forever preferred_lft forever

虚拟接口,成对出现

docker使用linux的桥接,宿主机中一个docker 容器的网桥:即Docker0

docker stop $(docker ps -aq) #暂停所有的容器

docker rm $(docker ps -aq) #删掉容器

ifconfig #只有docker0,刚刚创建的网桥不在了

  • 容器互联

Docker网络管理——容器互联

docker run --name tomcat3 -d -p 8080:8080 docker.io/tomee

docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7

docker exec -it mysql /bin/bash

ifconfig

#还是不行

#换了个tomee的镜像再重复刚刚操作就好了

#ip 是172.17.0.4

exit

    • ping ip

docker exec -it mytomcat /bin/bash

ping 172.17.0.4 #可以ping通,因为两个容器都在同一个局域网下

问题:要下载语言包

apt -y install iputils-ping

    • ping 名字

删除所有Tomcat容器

docker run --name my_tomcat3 -d -p 8080:8080 --link mysql1 tomcat

docker run --name mysql3 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

docker exec -it my_tomcat3 ping mysql3

问题:没ping通

原因分析:两个容器都要下载ping 命令

问题: mysql ping不了

解决:

apt-get update

apt-key adv --keyserver https://mirrors.tuna.tsinghua.edu.cn/ubuntu --recv-keys B7B3B788A8D3785C

apt -y install iputils-ping

#能通过名字进行Ping的原因分析:

映射关系

docker exec -it my_tomcat3 /bin/bash

cat /etc/hosts

[root@localhost opt]# docker exec -it my_tomcat1 /bin/bash

root@694940ed4da1:/usr/local/tomee# cat /etc/hosts

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.17.0.2 mysql1 b6f400762441

172.17.0.3 694940ed4da1

  • docker4种网络模式

Host模式

容器和宿主机共同一个网卡,使用宿主机的IP和端口(同时可以访问你的容器,全开放,不安全)

Container模式

刚创建的容器和之前创建的容器共用一个IP ,而不是和宿主机共享(极少用)

None模式

创建的容器没办法联网,最安全

bridge模式(默认,最常用)

docker0 分配IP,在同一个局域网里

  • 自定义网络

docker network --help

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 模式 网段 网关 名字

#192.168.66.0/24 : 192.168.66.1-192.168.66.254

#192.168.0.0/16 : 192.168.0.1-192.168.255.254

docker run --name tomcat -d -p 8080:8080 tomee

docker ps

docker network connect mynet tomcat #方法1

docker network inspect mynet

"1604ea3b0b420507237b7d46fee2fc0633da421c5a539a436af4fe6130f5cf52": {

"Name": "tomcat",

"EndpointID": "d0f5e72ad1942ea5b7ac38c848f87675b2696776ecce3355b2f01307c84da688",

"MacAddress": "02:42:c0:a8:00:02",

"IPv4Address": "192.168.0.2/16",

"IPv6Address": ""

docker network connect mynet tomcat

docker run -d -p 8090:8080 --name tomcat2 --net mynet tomee #方法2

docker network inspect mynet

"Containers": {

"1604ea3b0b420507237b7d46fee2fc0633da421c5a539a436af4fe6130f5cf52": {

"Name": "tomcat",

"EndpointID": "d0f5e72ad1942ea5b7ac38c848f87675b2696776ecce3355b2f01307c84da688",

"MacAddress": "02:42:c0:a8:00:02",

"IPv4Address": "192.168.0.2/16",

"IPv6Address": ""

},

"363b1a8fe1003533b1c872709aa61d583664a54723c799621afefe94a784207f": {

"Name": "tomcat2",

"EndpointID": "b3cd0b6cefe3d2079d582e9c5f9c60fe11a206179194e21296377984516fea40",

"MacAddress": "02:42:c0:a8:00:03",

"IPv4Address": "192.168.0.3/16",

"IPv6Address": ""

}

都在同一个网络下就能ping通

网关相同就能ping通

docker run -d -p 7070:8080 --name tomcat4 --net=host tomee #指定Docker的连接方式

  • Docker公有云-DockerHub
  • Docker C|S架构

sudo docker version

sudo docker -H tcp://127.0.0.1:1234 (docker run / docker pull )

  • Docker的联合文件

FROM centos:6.9

RUN rm -rf /etc/yum.repos.d/* && \

curl -o /etc/yum.repos.d/CentOS

Base.repo

http://mirrors.aliyun.com/repo/Centos-6.repo

&& \

curl -o /etc/yum.repos.d/epel.repo

http://mirrors.aliyun.com/repo/epel-6.repo

&& \

yum install nginx -y

WORKDIR /usr/share/nginx/html

ADD xiaoniao.tar.gz .

ADD init.sh /init.sh

EXPOSE 80

VOLUME /usr/share/nginx/html

CMD ["/bin/bash","/init.sh"]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值