当前位置:   article > 正文

【Docker】_容器docter

容器docter

  1.是什么

2.能干嘛

3.去哪下

4.怎么玩

5.helloword 

是什么

https://www.docker.com

GitHub - docker/docker-ce: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md

解决版本配置问题

将代码和环境打包成镜像

 

 别迷糊玺子,你就理解为docker相当于一个轻量化VM,只保留了必要的虚拟内核,没有模拟虚拟磁盘之类的硬件

 

 

Go语言

开源的应用容器引擎

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

优点

1、快速,一致地交付您的应用程序

2、响应式部署和扩展

3、在同一硬件上运行更多工作负载

架构

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

   

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

ESC服务器

 部署doctor必须要Linux内核

 

 查看自己的CentOS版本

 cat /etc/redhat-release
  1. uname -r
  2. 内核版本 硬件架构 主机名称 操作系统类型

docker直接使用实际物理机的硬件资源,不需要想虚拟机一样加载一个操作系统内核

容器iD NAMEs

cat /proc/version

yum -y install gcc
yum -y install gcc-c++

在新机子上安装第一次需要先设置仓库

sudo yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看当前系统版本

  1. 查看到 Docker 客户端的所有命令选项
  2. docker
  3. 查看帮助
  4. 命令 --help

卸载

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf/var/lib/docker
rm -rf /var/lib/containerd

yum install docker-ce docker-ce-cli contained.io
docker version
ps -ef|grep docker

容器使用

  1. 获取镜像
  2. 如果本地没有,用
  3. docker pull ubuntu
  4. 启动容器
  5. 使用ubuntu镜像启动一个容器,参数为 以命令行模式 以命令行模式
  6. docker run -it ubuntu /bin/bash
  7. -i: 交互式操作。
  8. -t: 终端。
  9. ubuntu: ubuntu 镜像。
  10. /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
  11. 退出
  12. exit
  13. 查看所有容器
  14. docker ps -a
  15. 启动
  16. docker start ID 或者 NAMES
  17. 后台运行
  18. docker run -itd --name ubuntu-test ubuntu /bin/bash
  19. -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
  20. --name 指定的容器的名字
  21. 停止容器
  22. docker stop <容器ID>
  23. 重启
  24. docker restart <容器ID>
  25. 进入容器
  26. docker attach <容器ID> 退出容器后,停止容器
  27. docker exec -it <容器ID> /bin/bash 退出容器后,不停止容器
  28. 导出容器
  29. docker export 1e560fca3906 > ubuntu.tar 后面是目录(需要该目录存在)
  30. 导入容器快照
  31. 删除
  32. docker rm -f 1e560fca3906
  33. 清理掉所有处于终止状态的容器
  34. docker container prune

帮助启动类命令

  1. systemctl status docker
  2. systemctl restart docker
  3. systemctl stop docker
  4. systemctl start docker
  5. 开启启动
  6. systemctl enable docker
  7. 查看docker概要信息
  8. docker info
  9. docker总体帮助命令
  10. docker --help
  11. docker命令帮助命令
  12. docker 具体命令 --help

镜像命令

  1. 查询本地的所有镜像
  2. docker images
  3. REPOSITORY 表示镜像的仓库源
  4. TAG 镜像的标签版本号
  5. IMAGE ID 镜像ID
  6. CREATED 镜像创建时间
  7. SIZE 镜像大小
  8. -a 列出本地所有的镜像(含历史版本)
  9. -q 只显示镜像ID
  10. docker images -a
  11. docker images -q
  12. 查看远程库是否有相关镜像
  13. docker search 某个镜像名字
  14. NAME 镜像名字
  15. DESCRIPTION 镜像说明
  16. STARS 点赞数量
  17. OFFICIAL 是否是官方的
  18. AUTOMATED 是否是自动构建的
  19. docker search --limit (25) 镜像名字
  20. 下载镜像
  21. docker pull 某个镜像名字[:TAG]
  22. 默认下载最新的
  23. 查看镜像/容器/数据卷所占的空间
  24. doker system df
  25. 删除镜像
  26. docker rmi 某个镜像名字ID
  27. docker -f rmi 镜像ID1 镜像ID2
  28. docker rmi -f $(docker images -qa)

虚悬镜像 dangling image

仓库名,标签都是<none>

容器命令

  1. 新建+启动容器
  2. docker run[OPTIONS]IMAGE[COMMAND][ARG...]
  3. OPTIONS说明
  4. --name=容器新名称
  5. -d 后台运行容器并返回容器ID,也即 启动守护式容器(后台启动)
  6. 启动交互式容器(前台有伪终端,等待交互)
  7. -i 以交互模式运行终端
  8. -t 为容器重新分配一个伪输入终端
  9. -P 随机分配端口映射
  10. -p 指定端口映射
  11. e.g. 希望有个shell
  12. docker run -it ubuntu /bin/bash
  13. 只加载Linux内核,没有vim,如果使用需要安装
  14. exit 退出
  1. 列出所有正在运行的容器实列
  2. docker ps[OPTIONS]
  3. 如果没有指定名称 则随机分配一个
  4. -a 列出所有的容器和历史上运行过的容器
  5. -l 显示最近创建的容器
  6. -n 3 显示最近创建的3个容器
  7. -q 静默模式 只显示容器编号
  1. 退出容器
  2. exit run 进去容器,exit退出,容器停止
  3. ctrl+p+q run进去容器,ctrl+p+q退出,容器不停止
  4. 启动已停止的容器
  5. docker start 容器ID或者容器名
  6. 重启
  7. docker restart 容器ID或者容器名
  8. 停止
  9. docker stop 容器ID或者容器名
  10. 强制停止
  11. docker kill 容器ID或者容器名
  12. 删除已经停止的容器
  13. docker rm 删容器
  14. docker rmi 删镜像
  15. docker rm 容器ID或者容器名
  16. 一次性删除多个
  17. docker rm -f ${docker ps -a -q}
  18. docker ps -a -q | xargs docker rm

注意:

  1. dokcer run
  2. dokcer ps

 启动守护式容器 docker run -d

docker run -d ubuntu

缺少前台进行,自杀 

  1. docker run -d redis:6.0.8
  2. docker ps
  3. 查看容器日志
  4. docker logs 容器ID
  5. linex
  6. top
  7. 查看容器内运行的进程
  8. docker top 容器ID
  9. 查看容器内部细节
  10. docker inspect 容器ID
  11. 进入正在运行的容器并以命令行交互
  12. docker exec -it 容器ID /bin/bash
  13. 在容器中打开新的终端,可以启动新的进程,用exit退出,不会导致容器的停止
  14. docker attach 容器ID
  15. 直接进入容器启动命令的终端,不会启动新的进程,用exit退出会导致容器停止
  16. Ctrl + p + q 后台运行容器,但是当你在使用 run 是重新创建一个新的容器,而 exec 是进入之前创建的容器

从容器内拷贝文件到主机上

docker cp 容器ID:容器内的路径 主机路径

将容器内的镜像导出tar

docker export 容器ID > 名字.tar

将tar导入容器

cat 名字.tar | docker import - 镜像用户/镜像名:镜像版本号

镜像

分层的镜像

UnionFS(联合文件系统)

 

 commit

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

原镜像删除不影响新的镜像

  生成镜像一共有两种

Dockerfile   commit

 下载仓库镜像

  1. docker pull registry
  2. docker images

 创建仓库容器

  1. docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
  2. -p hostPort:contalnerPort
  3. -p 81:80 -p 443:443 指定多个
  4. -p hostPort:containPort:udp 指定协议 -p 8080:80:tcp
  5. -p ip::containerPort 随机分配端口 -p 10.0.0.00::80
  6. -p ip:hostPort:containerPort 配置监听地址 -p 10.0.0.100:8080:80
  7. 默认情况下,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便宿主机联调
  8. 启动registry,centos会分配它一个端口,并映射到自己的电脑上的端口,因为运行这个镜像是一个后台进程,会有他自己的目录结构,所以为了方便使用目录,要把自己的目录挂载到centos的零时目录下

查询当前本地仓库中的镜像 

  1. curl-XGET http://ip:port/v2/_catalog
  2. 端口后面的路径是 docker 官方规定的镜像仓库的路径,详情见官网文档

将要添加到仓库的镜像改成符合规范的tag

docker tag 镜像:版本 ip:port/镜像:版本

修改配置文件的使其支持http

取消docker 默认不允许http方式推送镜像

(如修改后,不生效,重启docker)

  1. cat /etc/docker/daemon.json
  2. 添加
  3. "insecure-registries":["ip:port"]

  将镜像推送到私服

  1. docker images
  2. docker push 镜像名:版本

检查私服库上的镜像

(需要打开防火墙的5000端口)

  1. curl -XGET http://ip:port/v2/_catalog
  2. docker pull ip:port/镜像名:版本

容器数据卷

 

  1. -v 就是添加自定义的容器卷
  2. 宿主机的路径:容器内的路径
  3. --privileged=true 放开权限
  4. 实现了宿主机和容器内的路径的信息互联

 宿主机容器之间映射添加容器卷

docker run -it --privileged=true -v /宿主机的绝对路径:/容器内的目录 镜像名

重启已关闭的容器

  1. docker ps -a
  2. docker start 容器ID

重新进入

docker exec -it 容器ID /bin/bash

docker inspect : 获取容器/镜像的元数据。

可以用 docker inspect 容器ID 

来看容器的容器卷

  1. [root@VM-24-12-centos ~]# docker inspect f7
  2. [
  3. {
  4. "Id": "f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847",
  5. "Created": "2022-11-23T04:48:10.949098771Z",
  6. "Path": "bash",
  7. "Args": [],
  8. "State": {
  9. "Status": "running",
  10. "Running": true,
  11. "Paused": false,
  12. "Restarting": false,
  13. "OOMKilled": false,
  14. "Dead": false,
  15. "Pid": 5553,
  16. "ExitCode": 0,
  17. "Error": "",
  18. "StartedAt": "2022-11-23T04:54:20.925807082Z",
  19. "FinishedAt": "2022-11-23T04:52:31.34076589Z"
  20. },
  21. "Image": "sha256:a8780b506fa4eeb1d0779a3c92c8d5d3e6a656c758135f62826768da458b5235",
  22. "ResolvConfPath": "/var/lib/docker/containers/f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847/resolv.conf",
  23. "HostnamePath": "/var/lib/docker/containers/f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847/hostname",
  24. "HostsPath": "/var/lib/docker/containers/f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847/hosts",
  25. "LogPath": "/var/lib/docker/containers/f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847/f71707a5a9dd8f09da1e0e6941b10912376088515a2c4df535119ccceb794847-json.log",
  26. "Name": "/u2",
  27. "RestartCount": 0,
  28. "Driver": "overlay2",
  29. "Platform": "linux",
  30. "MountLabel": "",
  31. "ProcessLabel": "",
  32. "AppArmorProfile": "",
  33. "ExecIDs": null,
  34. "HostConfig": {
  35. "Binds": [
  36. "/tmp/host_data:/tmp/docker_data"
  37. ],
  38. "ContainerIDFile": "",
  39. "LogConfig": {
  40. "Type": "json-file",
  41. "Config": {}
  42. },
  43. "NetworkMode": "default",
  44. "PortBindings": {},
  45. "RestartPolicy": {
  46. "Name": "no",
  47. "MaximumRetryCount": 0
  48. },
  49. "AutoRemove": false,
  50. "VolumeDriver": "",
  51. "VolumesFrom": null,
  52. "CapAdd": null,
  53. "CapDrop": null,
  54. "CgroupnsMode": "host",
  55. "Dns": [],
  56. "DnsOptions": [],
  57. "DnsSearch": [],
  58. "ExtraHosts": null,
  59. "GroupAdd": null,
  60. "IpcMode": "private",
  61. "Cgroup": "",
  62. "Links": null,
  63. "OomScoreAdj": 0,
  64. "PidMode": "",
  65. "Privileged": true,
  66. "PublishAllPorts": false,
  67. "ReadonlyRootfs": false,
  68. "SecurityOpt": [
  69. "label=disable"
  70. ],
  71. "UTSMode": "",
  72. "UsernsMode": "",
  73. "ShmSize": 67108864,
  74. "Runtime": "runc",
  75. "ConsoleSize": [
  76. 0,
  77. 0
  78. ],
  79. "Isolation": "",
  80. "CpuShares": 0,
  81. "Memory": 0,
  82. "NanoCpus": 0,
  83. "CgroupParent": "",
  84. "BlkioWeight": 0,
  85. "BlkioWeightDevice": [],
  86. "BlkioDeviceReadBps": null,
  87. "BlkioDeviceWriteBps": null,
  88. "BlkioDeviceReadIOps": null,
  89. "BlkioDeviceWriteIOps": null,
  90. "CpuPeriod": 0,
  91. "CpuQuota": 0,
  92. "CpuRealtimePeriod": 0,
  93. "CpuRealtimeRuntime": 0,
  94. "CpusetCpus": "",
  95. "CpusetMems": "",
  96. "Devices": [],
  97. "DeviceCgroupRules": null,
  98. "DeviceRequests": null,
  99. "KernelMemory": 0,
  100. "KernelMemoryTCP": 0,
  101. "MemoryReservation": 0,
  102. "MemorySwap": 0,
  103. "MemorySwappiness": null,
  104. "OomKillDisable": false,
  105. "PidsLimit": null,
  106. "Ulimits": null,
  107. "CpuCount": 0,
  108. "CpuPercent": 0,
  109. "IOMaximumIOps": 0,
  110. "IOMaximumBandwidth": 0,
  111. "MaskedPaths": null,
  112. "ReadonlyPaths": null
  113. },
  114. "GraphDriver": {
  115. "Data": {
  116. "LowerDir": "/var/lib/docker/overlay2/0263bd664d02a95e53913b6ce105986dce2e13cc0e41c10dd4fe7208ea350474-init/diff:/var/lib/docker/overlay2/adfb71a8c8207e844ea4403939f0d588af5975d7dc44c8d72d5a2bf933643ba9/diff",
  117. "MergedDir": "/var/lib/docker/overlay2/0263bd664d02a95e53913b6ce105986dce2e13cc0e41c10dd4fe7208ea350474/merged",
  118. "UpperDir": "/var/lib/docker/overlay2/0263bd664d02a95e53913b6ce105986dce2e13cc0e41c10dd4fe7208ea350474/diff",
  119. "WorkDir": "/var/lib/docker/overlay2/0263bd664d02a95e53913b6ce105986dce2e13cc0e41c10dd4fe7208ea350474/work"
  120. },
  121. "Name": "overlay2"
  122. },
  123. "Mounts": [
  124. {
  125. "Type": "bind",
  126. "Source": "/tmp/host_data",
  127. "Destination": "/tmp/docker_data",
  128. "Mode": "",
  129. "RW": true,
  130. "Propagation": "rprivate"
  131. }
  132. ],
  133. "Config": {
  134. "Hostname": "f71707a5a9dd",
  135. "Domainname": "",
  136. "User": "",
  137. "AttachStdin": true,
  138. "AttachStdout": true,
  139. "AttachStderr": true,
  140. "Tty": true,
  141. "OpenStdin": true,
  142. "StdinOnce": true,
  143. "Env": [
  144. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  145. ],
  146. "Cmd": [
  147. "bash"
  148. ],
  149. "Image": "ubuntu",
  150. "Volumes": null,
  151. "WorkingDir": "",
  152. "Entrypoint": null,
  153. "OnBuild": null,
  154. "Labels": {}
  155. },
  156. "NetworkSettings": {
  157. "Bridge": "",
  158. "SandboxID": "b06e9b8df63040206e8e60b671d2b46acfe57b53309ac4dc4d67c242be865894",
  159. "HairpinMode": false,
  160. "LinkLocalIPv6Address": "",
  161. "LinkLocalIPv6PrefixLen": 0,
  162. "Ports": {},
  163. "SandboxKey": "/var/run/docker/netns/b06e9b8df630",
  164. "SecondaryIPAddresses": null,
  165. "SecondaryIPv6Addresses": null,
  166. "EndpointID": "84432eb2e9fe8fb5c33a02f783e14921b0e07fbf0bdea529fe15241816d7c3fa",
  167. "Gateway": "172.17.0.1",
  168. "GlobalIPv6Address": "",
  169. "GlobalIPv6PrefixLen": 0,
  170. "IPAddress": "172.17.0.3",
  171. "IPPrefixLen": 16,
  172. "IPv6Gateway": "",
  173. "MacAddress": "02:42:ac:11:00:03",
  174. "Networks": {
  175. "bridge": {
  176. "IPAMConfig": null,
  177. "Links": null,
  178. "Aliases": null,
  179. "NetworkID": "76b278b26a695a24e299af0baac3ec53c986b866cb306d59e0e665bb94207b60",
  180. "EndpointID": "84432eb2e9fe8fb5c33a02f783e14921b0e07fbf0bdea529fe15241816d7c3fa",
  181. "Gateway": "172.17.0.1",
  182. "IPAddress": "172.17.0.3",
  183. "IPPrefixLen": 16,
  184. "IPv6Gateway": "",
  185. "GlobalIPv6Address": "",
  186. "GlobalIPv6PrefixLen": 0,
  187. "MacAddress": "02:42:ac:11:00:03",
  188. "DriverOpts": null
  189. }
  190. }
  191. }
  192. }
  193. ]
  1. "Mounts": [
  2. {
  3. "Type": "bind",
  4. "Source": "/tmp/host_data",
  5. "Destination": "/tmp/docker_data",
  6. "Mode": "",
  7. "RW": true,
  8. "Propagation": "rprivate"
  9. }
  10. ],
  11. sorce 挂载宿主机的目录
  12. destination 容器内的目录

容器和宿主机内可以数据共享,即使容器被关闭,在主机内添加数据,重启服务后,也在容器会有添加的数据

即使删除容器,宿主机下面的目录中的数据也会存在。

修改容器卷的读写权限

  1. docker run -it --privileged=true -v 主机路径:容器路径:ro 镜像名
  2. ro only read 限制容器只能读取宿主机的数据,不能写入数据

继承容器卷

docker run -it --privileged=true --volumes-from 父类 --name u2 镜像名

安装

docker search tomcat
docker pull tomcat
docker images tomcat
docker run -d -p 8070:8080 tomcat

如果想要访问tomcat WebUI, 应该要在webapp文件夹下面

如果tomcat notfoung404

防火墙,端口号

如果是Apache Tomcat/10.1.2

docker exec -it 容器ID /bin/bash
  1. cd webapps/
  2. ll
  3. cd ..
  4. rm -rf webapps
  5. mv webapps.dist webapps

 免修改版

  1. docker pull billygoo/tomcat8-jdk8
  2. docker run -d -p 8070:8080 --name mytomcat8 billygoo/tomcat8-jdk8

mysql安装

  1. docker search mysql
  2. docker pull mysql:8.0.22
  3. docker images mysql:8.0.22
  4. docker run --name=mysql8 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=abc123 -d mysql:8.0.22
  5. docker ps
  6. docker exec -it 容器ID /bin/bash

root没有远程权限 

mysql8运行:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; 

SHOW VARIABLES LIKE 'character%';

需要设置容器数据卷来解决,每次在docker 生成mysql容器的 mysql的字符集问题

同时需要容器数据卷来备份容器中MySQL的数据

  1. docker run -d -p 13306:3306 --privileged=true \
  2. -v /zzyyuse/mysql/log:/var/log/mysql \
  3. -v /zzyyuse/mysql/data:/var/lib/mysql \
  4. -v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
  5. -e MYSQL_ROOT_PASSWORD=abc123 \
  6. --name mysql8 \
  7. mysql:8.0.22

容器里没有的一些工具(如vim),在宿主机上有,所以如果要修改容器卷的数据一般在宿主机里修改

cd /zzyyuse/mysql/conf
  1. ll
  2. vim my.cnf
  1. [client]
  2. default_character_set=utf8
  3. [mysql]
  4. collation_server = utf8_general_ci
  5. character_set_server = utf8
cat my.cnf
  1. dokcer ps
  2. dokcer restart mysql8
  3. docekr exec -it mysql /bin/bash
  4. mysql -uroot -p 密码
  5. SHOW VARIABLES LIKE 'character%';

要在容器内查看字符集,navicat会自动修改一下字符集

(9条消息) docker 推送镜像到腾讯云仓库_贾宝玉的贾的博客-CSDN博客_腾讯云docker镜像

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/215068
推荐阅读
相关标签
  

闽ICP备14008679号