前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

docker

作者头像
丁D
发布2022-08-12 20:58:58
1700
发布2022-08-12 20:58:58
举报
文章被收录于专栏:老铁丁D

docker

使用docker优点?

1.打包应用 到容器中 2.隔离 3.启动快

什么是docker?

Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

仓库(Repository)是集中存放镜像文件的场所,docker hub

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

alt
alt

安装docker

https://docs.docker.com/install/linux/docker-ce/centos/

常用命令

代码语言:javascript
复制
//查看镜像 
docker images 
//查询centos镜像 
docker search centos 
//拉取tag为6.8的centos 
docker pull centos:6.8 
//运行容器,并登录终端 
docker run -it centos:6.8 /bin/bash 
docker 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 
//删除容器,必须要先stop 
docker 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来指定创建新的镜像

代码语言:javascript
复制
//方式1 
//更新镜像并提交成新的镜像 
//-m:提交的描述信息 -a:指定镜像作者 
//e218edb10161 镜像id 
docker commit -m="has update" -a="runoob" 
//方式2 
//创建镜像 -t :指定要创建的目标镜像名 
docker build -t runoob/centos:6.7 . 
//设置镜像tag 
docker tag 860c279d2fec runoob/centos:dev 

创建java环境镜像 1.使用centos6.8做基础镜像 2.安装jdk 3.安装tomcat 4.配置环境变量并暴露端口

步骤 1.创建一个文件夹。

代码语言:javascript
复制
mkdir docker 

2.将apache-tomcat-8.5.40.tar.gz jdk-8u144-linux-x64.tar.gz 复制到docker文件夹中 Dockerfile的文件中的相对路径是Dockerfile所在的目录

代码语言:javascript
复制
cp /usr/local/apache-tomcat-8.5.40.tar.gz ~/docker 
cp /usr/local/jdk-8u144-linux-x64.tar.gz ~/docker 

3.创建并编写Dockerfile文件

代码语言:javascript
复制
FROM centos:6.8 
MAINTAINER xujd 
ADD jdk-8u144-linux-x64.tar.gz /usr/local 
ADD apache-tomcat-8.5.40.tar.gz /usr/local 
ENV JAVA_HOME=/usr/local/jdk1.8.0_144 
ENV PATH=$JAVA_HOME/bin:$PATH 
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
EXPOSE 8080 
FROM centos:6.8 
MAINTAINER xujd 
ADD jdk-8u144-linux-x64.tar.gz /usr/local 
ADD apache-tomcat-8.5.40 /usr/local/apache-tomcat-8.5.40 
ENV JAVA_HOME=/usr/local/jdk1.8.0_144 
ENV PATH=$JAVA_HOME/bin:$PATH 
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
ENV APP_ENCRYPTION_PASSWORD=123456 
EXPOSE 8080 
CMD ["/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.40 apache-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目录

代码语言:javascript
复制
docker build -t xujd/blog_image . 
//查看镜像 docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
xujd/blog_image latest 62ff846ee49c 2 hours ago 584.6 MB 

5.运行容器

代码语言:javascript
复制
//第一个8080是本地的 第二个8080是docker -d后台运行 
//catalina.sh run 启动容器的时候也启动tomcat 
//可以在Dockerfile使用**CMD**命令来控制运行容器就启动tomcat就不要catalina.sh run 
docker run -d -p 8081:8080 xujd/blog_image /usr/local/apache-tomcat-8.5.40/bin/catalina.sh run 

运行一个war包

代码语言:javascript
复制
//war是本博客的 
//--env配置环境变量,因为配置文件密码加密 
//-v将宿主机~/webapps/挂载docker中tomcat的webapps 
docker run --env APP_ENCRYPTION_PASSWORD=123456 -d -p 8080: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

代码语言:javascript
复制
//ifconfig 
docker0 Link encap:Ethernet HWaddr 3E:AF:01:F7:09:61 
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
RX packets:8749 errors:0 dropped:0 overruns:0 frame:0 
TX packets:22844 errors:0 dropped:0 overruns:0 carrier:0 
collisions:0 txqueuelen:0 
RX bytes:1820508 (1.7 MiB) TX bytes:32405691 (30.9 MiB) 

注意2:

数据库默认只能127.0.0.1才能访问所以要设置能其他ip访问

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
flush privileges; 

问题:

代码语言:javascript
复制
由于我重启了防火墙,但是没有重启docker,启动容器报错!! 
docker0: iptables: No chain/target/match by that name 
解决方案:重启docker: service restart docker 
登录docker容器内部在/etc/profile,source /etc/profile配置环境变量不生效 
解决方案: 
1.Dockerfile配置文件使用env来配置 推荐 
2.运行容器的时候使用--env来指定。上面就是这个做的/root/.bashrc 
3.登录容器中配置在/root/.bashrc文件中(没试过) 
docker pull 54288.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 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker
    • 使用docker优点?
      • 什么是docker?
        • 安装docker
          • 常用命令
            • 创建镜像2种方式
              • 运行一个war包
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档