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

docker

作者头像
丁D
发布2022-08-21 15:43:03
2290
发布2022-08-21 15:43:03
举报
文章被收录于专栏:老铁丁D

摘要Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

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/

常用命令

  1. //查看镜像
  2. docker images
  3. //查询centos镜像
  4. docker search centos
  5. //拉取tag为6.8的centos
  6. docker pull centos:6.8
  7. //运行容器,并登录终端
  8. docker run -it centos:6.8 /bin/bash
  9. docker run -d xujd_v2/blog_image /bin/bash -c "while true; do echo hello world; sleep 1; done"
  10. //停止一个正在运行的容器
  11. docker stop c1e43f1b4c40
  12. //启动一个容器,之前使用过docker run运行过的
  13. docker start
  14. //docker run 和 docker start区别
  15. docker run只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可
  16. // 进入一个已经在运行的容器
  17. sudo docker exec -it c1e43f1b4c40 /bin/bash
  18. //查看正在运行的容器
  19. docker ps
  20. //查看所有的容器
  21. docker ps -a
  22. //删除容器,必须要先stop
  23. docker rm
  24. //删除镜像,必须先删除容器,
  25. docker rmi xxxx
  26. //提供用户交互的输入
  27. -i
  28. //进入镜像终端
  29. -t
  30. //后台运行
  31. -d
  32. //映射端口
  33. -p
  34. //查看docker容器详情
  35. docker inspect c13c4f513eab
  36. [
  37. {
  38. "Id": "c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e",
  39. "Created": "2019-04-23T02:34:15.419464005Z",
  40. "Path": "/bin/bash",
  41. "Args": [],
  42. "State": {
  43. "Running": true,
  44. "Paused": false,
  45. "Restarting": false,
  46. "OOMKilled": false,
  47. "Dead": false,
  48. "Pid": 28969,
  49. "ExitCode": 0,
  50. "Error": "",
  51. "StartedAt": "2019-04-23T03:13:29.799806806Z",
  52. "FinishedAt": "2019-04-23T02:36:17.837234697Z"
  53. },
  54. "Image": "efa3cf7ee1f93d75578007edf881ddc2cc048e9da03503f103c819b157f94b75",
  55. "NetworkSettings": {
  56. "Bridge": "",
  57. "EndpointID": "49c648da46dcc4e2f794fc146cfb969fa4cdf89c1d159534cd8a701cf9f9a811",
  58. "Gateway": "172.17.42.1",
  59. "GlobalIPv6Address": "",
  60. "GlobalIPv6PrefixLen": 0,
  61. "HairpinMode": false,
  62. "IPAddress": "172.17.0.19",
  63. "IPPrefixLen": 16,
  64. "IPv6Gateway": "",
  65. "LinkLocalIPv6Address": "",
  66. "LinkLocalIPv6PrefixLen": 0,
  67. "MacAddress": "02:42:ac:11:00:13",
  68. "NetworkID": "1d5d60cb383beaed8c57ba5edc08129e82b78cf2cdb95e9b8bdfe49c4f923d0e",
  69. "PortMapping": null,
  70. "Ports": {},
  71. "SandboxKey": "/var/run/docker/netns/c13c4f513eab",
  72. "SecondaryIPAddresses": null,
  73. "SecondaryIPv6Addresses": null
  74. },
  75. "ResolvConfPath": "/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/resolv.conf",
  76. "HostnamePath": "/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/hostname",
  77. "HostsPath": "/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/hosts",
  78. "LogPath": "/var/lib/docker/containers/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e/c13c4f513eab415ad355ba7607392a84d69cb0ba0018739cf3e040780a148d4e-json.log",
  79. "Name": "/naughty_lalande",
  80. "RestartCount": 0,
  81. "Driver": "devicemapper",
  82. "ExecDriver": "native-0.2",
  83. "MountLabel": "",
  84. "ProcessLabel": "",
  85. "Volumes": {},
  86. "VolumesRW": {},
  87. "AppArmorProfile": "",
  88. "ExecIDs": null,
  89. "HostConfig": {
  90. "Binds": null,
  91. "ContainerIDFile": "",
  92. "LxcConf": [],
  93. "Memory": 0,
  94. "MemorySwap": 0,
  95. "CpuShares": 0,
  96. "CpuPeriod": 0,
  97. "CpusetCpus": "",
  98. "CpusetMems": "",
  99. "CpuQuota": 0,
  100. "BlkioWeight": 0,
  101. "OomKillDisable": false,
  102. "Privileged": false,
  103. "PortBindings": {},
  104. "Links": null,
  105. "PublishAllPorts": false,
  106. "Dns": null,
  107. "DnsSearch": null,
  108. "ExtraHosts": null,
  109. "VolumesFrom": null,
  110. "Devices": [],
  111. "NetworkMode": "bridge",
  112. "IpcMode": "",
  113. "PidMode": "",
  114. "UTSMode": "",
  115. "CapAdd": null,
  116. "CapDrop": null,
  117. "RestartPolicy": {
  118. "Name": "no",
  119. "MaximumRetryCount": 0
  120. },
  121. "SecurityOpt": null,
  122. "ReadonlyRootfs": false,
  123. "Ulimits": null,
  124. "LogConfig": {
  125. "Type": "json-file",
  126. "Config": {}
  127. },
  128. "CgroupParent": ""
  129. },
  130. "Config": {
  131. "Hostname": "c13c4f513eab",
  132. "Domainname": "",
  133. "User": "",
  134. "AttachStdin": true,
  135. "AttachStdout": true,
  136. "AttachStderr": true,
  137. "PortSpecs": null,
  138. "ExposedPorts": null,
  139. "Tty": true,
  140. "OpenStdin": true,
  141. "StdinOnce": true,
  142. "Env": [
  143. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  144. ],
  145. "Cmd": [
  146. "/bin/bash"
  147. ],
  148. "Image": "centos:6.8",
  149. "Volumes": null,
  150. "VolumeDriver": "",
  151. "WorkingDir": "",
  152. "Entrypoint": null,
  153. "NetworkDisabled": false,
  154. "MacAddress": "",
  155. "OnBuild": null,
  156. "Labels": {
  157. "build-date": "2016-06-02",
  158. "license": "GPLv2",
  159. "name": "CentOS Base Image",
  160. "vendor": "CentOS"
  161. }
  162. }
  163. }
  164. ]

创建镜像2种方式

1.使用已经存在的镜像,并更新提交形成新的镜像 2.使用 Dockerfile来指定创建新的镜像

  1. //方式1
  2. //更新镜像并提交成新的镜像
  3. //-m:提交的描述信息 -a:指定镜像作者
  4. //e218edb10161 镜像id
  5. docker commit -m="has update" -a="runoob"
  6. //方式2
  7. //创建镜像 -t :指定要创建的目标镜像名
  8. docker build -t runoob/centos:6.7 .
  9. //设置镜像tag
  10. docker tag 860c279d2fec runoob/centos:dev

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

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

  1. mkdir docker

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

  1. cp /usr/local/apache-tomcat-8.5.40.tar.gz ~/docker
  2. cp /usr/local/jdk-8u144-linux-x64.tar.gz ~/docker

3.创建并编写Dockerfile文件

  1. FROM centos:6.8
  2. MAINTAINER xujd
  3. ADD jdk-8u144-linux-x64.tar.gz /usr/local
  4. ADD apache-tomcat-8.5.40.tar.gz /usr/local
  5. ENV JAVA_HOME=/usr/local/jdk1.8.0_144
  6. ENV PATH=$JAVA_HOME/bin:$PATH
  7. ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  8. EXPOSE 8080
  9. FROM centos:6.8
  10. MAINTAINER xujd
  11. ADD jdk-8u144-linux-x64.tar.gz /usr/local
  12. ADD apache-tomcat-8.5.40 /usr/local/apache-tomcat-8.5.40
  13. ENV JAVA_HOME=/usr/local/jdk1.8.0_144
  14. ENV PATH=$JAVA_HOME/bin:$PATH
  15. ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  16. ENV APP_ENCRYPTION_PASSWORD=123456
  17. EXPOSE 8080
  18. CMD ["/usr/local/apache-tomcat-8.5.40/bin/catalina.sh", "run"]
  19. 这个跟上面那个的区别是
  20. 上面的tomcat是tar ADD命令会自动解压,,没有war 到时候在使用挂载方式
  21. 下面 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目录中了
  22. 下面是自己手动解压(jar xvf blog.war)后的。。目标目录要自己创建(/usr/local/apache-tomcat-8.5.40)
  23. 不然会将源目录下面的文件 复制到/usr/local/下面而不是
  24. /usr/local/apache-tomcat-8.5.40

4.构建 使用-t指定镜像名 .当前目录是docker目录

  1. docker build -t xujd/blog_image .
  2. //查看镜像 docker images
  3. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  4. xujd/blog_image latest 62ff846ee49c 2 hours ago 584.6 MB

5.运行容器

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

运行一个war包

  1. //war是本博客的
  2. //--env配置环境变量,因为配置文件密码加密
  3. //-v将宿主机~/webapps/挂载docker中tomcat的webapps
  4. 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

  1. //ifconfig
  2. docker0 Link encap:Ethernet HWaddr 3E:AF:01:F7:09:61
  3. inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5. RX packets:8749 errors:0 dropped:0 overruns:0 frame:0
  6. TX packets:22844 errors:0 dropped:0 overruns:0 carrier:0
  7. collisions:0 txqueuelen:0
  8. RX bytes:1820508 (1.7 MiB) TX bytes:32405691 (30.9 MiB)

注意2:

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

  1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  2. flush privileges;

问题:

  1. 由于我重启了防火墙,但是没有重启docker,启动容器报错!!
  2. docker0: iptables: No chain/target/match by that name
  3. 解决方案:重启docker: service restart docker
  4. 登录docker容器内部在/etc/profile,source /etc/profile配置环境变量不生效
  5. 解决方案:
  6. 1.Dockerfile配置文件使用env来配置 推荐
  7. 2.运行容器的时候使用--env来指定。上面就是这个做的/root/.bashrc
  8. 3.登录容器中配置在/root/.bashrc文件中(没试过)
  9. docker pull 54288.top:/registry:2.1.
  10. 报错 http: server gave HTTP response to HTTPS client
  11. 在/etc/docker目录下新建daemon.json文件
  12. [root@k8s-master1 kubernetes]# cat /etc/docker/daemon.json
  13. { "insecure-registries":["54288.top:5000"] }
  14. 参考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 归档