摘要Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker
使用docker优点?
1.打包应用 到容器中 2.隔离 3.启动快
什么是docker?
Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
仓库(Repository)是集中存放镜像文件的场所,docker hub。
Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

安装docker
https://docs.docker.com/install/linux/docker-ce/centos/
常用命令
//查看镜像docker images//查询centos镜像docker search centos//拉取tag为6.8的centosdocker pull centos:6.8//运行容器,并登录终端docker run-it centos:6.8/bin/bashdocker run-d xujd_v2/blog_image/bin/bash-c"while true; do echo hello world; sleep 1; done"//停止一个正在运行的容器docker stop c1e43f1b4c40//启动一个容器,之前使用过docker run运行过的docker start//docker run 和 docker start区别docker run只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start即可// 进入一个已经在运行的容器sudo docker exec-it c1e43f1b4c40/bin/bash//查看正在运行的容器docker ps//查看所有的容器docker ps-a//删除容器,必须要先stopdocker rm//删除镜像,必须先删除容器,docker rmi xxxx//提供用户交互的输入-i//进入镜像终端-t//后台运行-d//映射端口-p//查看docker容器详情docker inspect c13c4f513eab[{"Id":"c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e","Created":"2019-04-23T02:34:15.419464005Z","Path":"/bin/bash","Args":[],"State":{"Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"Dead":false,"Pid":28969,"ExitCode":0,"Error":"","StartedAt":"2019-04-23T03:13:29.799806806Z","FinishedAt":"2019-04-23T02:36:17.837234697Z"},"Image":"efa3cf7ee1f93d75578007edf881ddc2cc048e9da03503f103c819b157f94b75","NetworkSettings":{"Bridge":"","EndpointID":"49c648da46dcc4e2f794fc146cfb969fa4cdf89c1d159534cd8a701cf9f9a811","Gateway":"172.17.42.1","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"HairpinMode":false,"IPAddress":"172.17.0.19","IPPrefixLen":16,"IPv6Gateway":"","LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:13","NetworkID":"1d5d60cb383beaed8c57ba5edc08129e82b78cf2cdb95e9b8bdfe49c4f923d0e","PortMapping":null,"Ports":{},"SandboxKey":"/var/run/docker/netns/c13c4f513eab","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null},"ResolvConfPath":"/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/resolv.conf","HostnamePath":"/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/hostname","HostsPath":"/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/hosts","LogPath":"/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e-json.log","Name":"/naughty_lalande","RestartCount":0,"Driver":"devicemapper","ExecDriver":"native-0.2","MountLabel":"","ProcessLabel":"","Volumes":{},"VolumesRW":{},"AppArmorProfile":"","ExecIDs":null,"HostConfig":{"Binds":null,"ContainerIDFile":"","LxcConf":[],"Memory":0,"MemorySwap":0,"CpuShares":0,"CpuPeriod":0,"CpusetCpus":"","CpusetMems":"","CpuQuota":0,"BlkioWeight":0,"OomKillDisable":false,"Privileged":false,"PortBindings":{},"Links":null,"PublishAllPorts":false,"Dns":null,"DnsSearch":null,"ExtraHosts":null,"VolumesFrom":null,"Devices":[],"NetworkMode":"bridge","IpcMode":"","PidMode":"","UTSMode":"","CapAdd":null,"CapDrop":null,"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"SecurityOpt":null,"ReadonlyRootfs":false,"Ulimits":null,"LogConfig":{"Type":"json-file","Config":{}},"CgroupParent":""},"Config":{"Hostname":"c13c4f513eab","Domainname":"","User":"","AttachStdin":true,"AttachStdout":true,"AttachStderr":true,"PortSpecs":null,"ExposedPorts":null,"Tty":true,"OpenStdin":true,"StdinOnce":true,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/bash"],"Image":"centos:6.8","Volumes":null,"VolumeDriver":"","WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"MacAddress":"","OnBuild":null,"Labels":{"build-date":"2016-06-02","license":"GPLv2","name":"CentOS Base Image","vendor":"CentOS"}}}]
创建镜像2种方式
1.使用已经存在的镜像,并更新提交形成新的镜像 2.使用 Dockerfile来指定创建新的镜像
//方式1//更新镜像并提交成新的镜像//-m:提交的描述信息 -a:指定镜像作者//e218edb10161 镜像iddocker commit-m="has update"-a="runoob"//方式2//创建镜像 -t :指定要创建的目标镜像名docker build-t runoob/centos:6.7.//设置镜像tagdocker tag860c279d2fecrunoob/centos:dev
创建java环境镜像 1.使用centos6.8做基础镜像 2.安装jdk 3.安装tomcat 4.配置环境变量并暴露端口
步骤 1.创建一个文件夹。
mkdir docker
2.将apache-tomcat-8.5.40.tar.gz jdk-8u144-linux-x64.tar.gz 复制到docker文件夹中 Dockerfile的文件中的相对路径是Dockerfile所在的目录
cp/usr/local/apache-tomcat-8.5.40.tar.gz~/dockercp/usr/local/jdk-8u144-linux-x64.tar.gz~/docker
3.创建并编写Dockerfile文件
FROM centos:6.8MAINTAINER xujdADD jdk-8u144-linux-x64.tar.gz/usr/localADD apache-tomcat-8.5.40.tar.gz/usr/localENV JAVA_HOME=/usr/local/jdk1.8.0_144ENV PATH=$JAVA_HOME/bin:$PATHENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarEXPOSE8080FROM centos:6.8MAINTAINER xujdADD jdk-8u144-linux-x64.tar.gz/usr/localADD apache-tomcat-8.5.40/usr/local/apache-tomcat-8.5.40ENV JAVA_HOME=/usr/local/jdk1.8.0_144ENV PATH=$JAVA_HOME/bin:$PATHENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV APP_ENCRYPTION_PASSWORD=123456EXPOSE8080CMD["/usr/local/apache-tomcat-8.5.40/bin/catalina.sh","run"]这个跟上面那个的区别是上面的tomcat是tar ADD命令会自动解压,,没有war到时候在使用挂载方式下面ADD apache-tomcat-8.5.40/usr/local/apache-tomcat-8.5.40apache-tomcat-8.5.40是一个目录不是tar..已经将要部署的war解压(jar xvf blog.war)放入tomcat的webapp目录中了下面是自己手动解压(jar xvf blog.war)后的。。目标目录要自己创建(/usr/local/apache-tomcat-8.5.40)不然会将源目录下面的文件复制到/usr/local/下面而不是/usr/local/apache-tomcat-8.5.40
4.构建 使用-t指定镜像名 .当前目录是docker目录
docker build-t xujd/blog_image.//查看镜像 docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZExujd/blog_image latest62ff846ee49c2hours ago584.6MB
5.运行容器
//第一个8080是本地的 第二个8080是docker -d后台运行//catalina.sh run 启动容器的时候也启动tomcat//可以在Dockerfile使用**CMD**命令来控制运行容器就启动tomcat就不要catalina.sh rundocker run-d-p8081:8080xujd/blog_image/usr/local/apache-tomcat-8.5.40/bin/catalina.sh run
运行一个war包
//war是本博客的//--env配置环境变量,因为配置文件密码加密//-v将宿主机~/webapps/挂载docker中tomcat的webappsdocker run--env APP_ENCRYPTION_PASSWORD=123456-d-p8080:8080-v~/webapps/:/usr/local/apache-tomcat-8.5.40/webapps/xujd/blog_image/usr/local/apache-tomcat-8.5.40/bin/catalina.sh run
注意1: 博客要连接数据库,数据库在宿主机上,所以docker需要连接外部数据库 docker数据库连接不能用127.0.0.1了要换成宿主机的ip(docker虚拟出来的网卡) 查看宿主机的ip docker0
//ifconfigdocker0Linkencap:EthernetHWaddr3E:AF:01:F7:09:61inet addr:172.17.42.1Bcast:0.0.0.0Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST MTU:1500Metric:1RX packets:8749errors:0dropped:0overruns:0frame:0TX packets:22844errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RX bytes:1820508(1.7MiB)TX bytes:32405691(30.9MiB)
注意2:
数据库默认只能127.0.0.1才能访问所以要设置能其他ip访问
GRANT ALL PRIVILEGES ON*.*TO'root'@'%'IDENTIFIED BY'123456'WITH GRANT OPTION;flush privileges;
问题:
由于我重启了防火墙,但是没有重启docker,启动容器报错!!docker0:iptables:Nochain/target/match by that name解决方案:重启docker:service restart docker登录docker容器内部在/etc/profile,source/etc/profile配置环境变量不生效解决方案:1.Dockerfile配置文件使用env来配置推荐2.运行容器的时候使用--env来指定。上面就是这个做的/root/.bashrc3.登录容器中配置在/root/.bashrc文件中(没试过)docker pull54288.top:/registry:2.1.报错http:server gave HTTP response to HTTPS client在/etc/docker目录下新建daemon.json文件[root@k8s-master1 kubernetes]#cat/etc/docker/daemon.json{"insecure-registries":["54288.top:5000"]}参考https://www.cnblogs.com/hobinly/p/6110624.html


