首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

Docker基础之五: 使用Docker容器

使用Docker容器 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。) 这一节我们将从运行一个简单的Hello world入手,来讲解如何使用容器。 1 运行Hello World root@shev:~# docker run ubuntu:14.04 echo hello-world hello-world root@shev:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0cef7fa7468d ubuntu:14.04 "echo hello-world" 3 seconds ago Exited (0) 2 seconds ago condescending_visvesvaraya 剖析: 本条命令启动ubuntu:14.04版本的镜像,并在其中运行打印hello world的命令; 由于我们的命令是一个简单的语句,并不会持续很长时间,当命令执行完毕时,容器就退出了 因此,我们通过docker ps –a可以看到容器的状态是停止状态 2 运行一个可交互的容器 之前的例子里面,容器在运行完指令后就自动退出了,那么我们可不可以运行一个可交互的容器呢? root@shev:~# docker run -it ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu Digest: sha256:f91f9bab1fe6d0db0bfecc751d127a29d36e85483b1c68e69a246cf1df9b4251 Status: Downloaded newer image for ubuntu:latest root@558531c2b215:/# ll total 72 drwxr-xr-x 32 root root 4096 Dec 2 09:16 ./ drwxr-xr-x 32 root root 4096 Dec 2 09:16 ../ -rwxr-xr-x 1 root root 0 Dec 2 09:16 .dockerenv* -rwxr-xr-x 1 root root 0 Dec 2 09:16 .dockerinit* drwxr-xr-x 2 root root 4096 Oct 28 04:34 bin/ drwxr-xr-x 2 root root 4096 Apr 10 2014 boot/ drwxr-xr-x 5 root root 380 Dec 2 09:16 dev/ drwxr-xr-x 64 root root 4096 Dec 2 09:16 etc/ drwxr-xr-x 2 root root 4096 Apr 10 2014 home/ drwxr-xr-x 12 root root 4096 Oct 28 04:34 lib/ drwxr-xr-x 2 root root 4096 Oct 28 04:33 lib64/ drwxr-xr-x 2 root root 4096 Oct 28 04:33 media/ drwxr-xr-x 2 root root 4096 Apr 10 2014 mnt/ drwxr-xr-x 2 root root 4096 Oct 28 04:33 opt/ dr-xr-xr-x 160 root root 0 Dec 2 09:16 proc/ drwx------ 2 root root 4096 Oct 28 04:34 root/ drwxr-xr-x 7 root root 4096 Oct 28 04:34 run/ drwxr-xr-x 2 root root 4096 Nov 10 00:35 sbin/ drwxr-xr-x 2 root root 4096 Oct 28 04:33 srv/ dr-xr-xr-x 13 root root 0 Dec 2 09:16 sys/ drwxrwxrwt 2 root root 4096 Oct 28 04:34 tmp/ drwxr-xr-x 11 root root 4096 Nov 10 00:35 usr/ drwxr-xr-x 12 root root 4096 Nov 10 00:35 var/ root@558531c2b215:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:648 (648.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 剖析: 本例中,我们在ubuntu:latest镜像中,执行/bin/bash,由于bash本身是一个包含了交互的终端,因此我们可以长时间的运行容器; 但是,我们必须指定-it,同shell的stdiin和stdout绑定起来 进入容器后,我们实际进入了一个shell终端,里面不仅可以访问文件将,还有一个虚拟网卡和IP。这是不是跟一个linux主机是一样的呢? 3 在容器中运行一个后台守护进程 所谓后台守护进程,就是运行在后台,并不会阻塞当前的进程。 在后台运行一个脚本,每隔1秒打印一句hello world: root@shev:~# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" ba50b5023bb15b50608d855671d40c09690f5b1a956a40e3544acde791e04aa3 查看后台的运行日志: root@shev:~# docker logs ba50 hello world hello world hello world hello world hello world hello world hello world 查看当前正在运行的容器列表: root@shev:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba50b5023bb1 ubuntu:14.04 "/bin/sh -c 'while tr" 2 minutes ago Up 2 minutes ecstatic_bell e221abf45a0b ghostcloud.cn:5000/gcali:1.2 "/usr/local/ghostclou" 49 minutes ago Up 49 minutes gcsagent 停止指定的容器: root@shev:~# docker stop ba50 ba50 再次查看正在运行的容器: root@shev:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e221abf45a0b ghostcloud.cn:5000/gcali:1.2 "/usr/local/ghostclou" 50 minutes ago Up 50 minutes gcsagent 剖析: 本例中,我们通过-d属性,让容器运行在后台,我们并不进入容器内部 执行完毕后,返回了一个id,该id是容器的id。上面显示的是容器的完整id,但是我们实际操作的时候,一般可以只输入前面几位即可,docker会自动进行匹配 我们通过docker logs来查看容器运行的情况,也就是我们循环打印的日志 由于该容器是长时间运行的,所以我们可以通过docker ps,查看该容器 docker stop则是停止该容器,停止后,我们就看不到该容器了

优秀的个人博客,低调大师

Docker基础之八: 容器的网络

容器的网络 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。) 根据之前的教程我们只是运行了简单的应用程序。之前我们编译了自己的image,在本节中我们将讲述如何管理容器的网络。 1 容器命名 如果你仔细查看docker ps的输出,你会看到docker自动生成了容器的名称: root@gctest:~/.ghostcloud/bin# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09475612bb40 ghostcloud.cn:5005/gcali:1.0.8 "/usr/local/ghostclou" 2 minutes ago Up 2 minutes gcsagent f8eb8005de81 myimage "/bin/sh -c 'echo 'he" 15 minutes ago Exited (0) 15 minutes ago compassionate_cray 46ffa55f5680 ubuntu "/bin/bash" 37 minutes ago Exited (0) 29 minutes ago lonely_mirzakhani 40b4301839a1 ubuntu "echo hello-world" 40 minutes ago Exited (0) 40 minutes ago compassionate_torvalds compassionate_cray就是一个名称。通过容器命令,可以提供两个有用的功能: 默认你是通过容器的ID进行操作,你可以为特定容器设置容器名称,比如如果容器是一个web应用,你可以把它标记为web。 容器之间,可以通过名称进行相互的引用和链接. 容器的名称通过--name来进行设置: $ docker run -d -P --name web training/webapp python app.py 我们可以通过docker inspect来查看容器的详细参数: ``` ##2 容器的默认网络 Docker自身通过网络驱动来管理网络。默认Docker提供两种网络驱动,bridge和overlay。你可以自己编写网络驱动作为插件,但是这个工作比较麻烦,这儿就省略了。 Docker安装后,会自动生成3种网络: root@gctest:~# docker network ls NETWORK ID NAME DRIVER 782f465fa194 none null 6887a082de45 host host 6e75573f448f bridge bridge bridge是一种特殊的网络模式,这是默认的网络模式。我们可以通过inspect来查看详细信息: ```Bash root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": { "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "48fbb1fa53db756cc4afdf4db81182bd4347bf208dba49ed27c3187ea2d6c8c0", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 从上面我们可以看出,桥接的网卡是172.17.0.1/16,网关是172.17.0.1。其中有一个容器连接到了这个桥接网络中,它的ip是172.17.0.2/16。 如果你想将容器从网络中移除,你可以使用: root@gctest:~# docker network disconnect bridge 85a5 root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 3 创建自己的桥接网络 Docker原生支持bridge和overlay网络,bridge只能在单个主机上使用。overlay可以在多台主机间使用,这部分将在后续进行详细讲解。下面我们就来建立一个自己的网络: root@gctest:~# docker network create -d bridge mybridge 36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9 root@gctest:~# docker network ls NETWORK ID NAME DRIVER 6e75573f448f bridge bridge 782f465fa194 none null 6887a082de45 host host 36328af2a0b1 mybridge bridge -d表示使用已有的bridge来创建新的网络,你也可以省略该参数,这个是默认参数。 4 添加容器到网络 默认情况,容器使用的是同一个bridge网络,这样可能有一定的安全隐患,为了做到完全的隔离,我们可以自己建一个桥接网络,然后在启动容器时将容器加入到自己的网络中。比如: root@gctest:~# docker run -it --net=mybridge ubuntu /bin/bash 如果你inspect你的网络,你会看到详细的连接信息: root@gctest:~/.ghostcloud/bin# docker network inspect mybridge [ { "Name": "mybridge", "Id": "36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "2c1fda7b6efda429d2bf7c85a131200ee370512cea214a7fe423c28d952e1320": { "EndpointID": "1b988bffa26ca9e6ee3cbfc5081b8adb5dcb5cde359404ff6afb73fb954a2b93", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "0440158825ce6c1e6efc224238ab83084761a9c2e6fa28f162d2188e514aa737", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {} } ] 如果启动时没有指定网络或想加入多个网络,可以通过connect命令加入。

优秀的个人博客,低调大师

6步搭建一个飞机大战游戏

摘要:本文以华为云软件开发平台DevCloud为例,展示飞机大战游戏开发的DevOps实践流程。 DevOps实践 DevOps实践是一种开发、测试运维一体化的模式,其实践的外在表现一般包括了如代码仓库、构建、测试、发布、配置、监控等工具形成的一个完整的工具链或者说开发平台,以华为云软件开发平台DevCloud为例,展示飞机大战游戏开发的DevOps实践流程。 实践手册下载>>> 提交实践结果赢奖品>>> 实验介绍 项目名称:飞机大战游戏 项目简介:一个用 Cocos Creator 开发的 Web 游戏,可以进行飞机大战。 开发语言:JavaScript(49.3%)、CSS(36.6%)、Html(14%) 部署环境:CentOS 7.6 64bit for Kai1s +jdk1.8 涉及云服务:华为云 DevCloud、华为云弹性云服务器 ECS 操作流程 操作步骤 创建私有云 步骤1:在华为云服务列表找到“服务列表”,进入华为云“虚拟私有云VPC”,创建虚拟私有云,配置虚拟私有云名称和子网名称,其他默认配置,点击立即创建; 步骤2:创建安全组并添加规则 创建安全组 名称:sg-plane 企业:default 模板:通用Web服务器 描述:无 添加规则:添加入向规则 优先级:1 协议端口:TCP 输入:8080 创建项目 在华为云官网产品列表中,前往“软件开发平台DevCloud”的管理控制台,新建项目; 项目流程:看板 项目名称:自定义 创建代码仓库 进入代码->代码托管,导入外部仓库: 源仓库地址:https://codehub.devcloud.cn-north4.huaweicloud.com/yxdmmsymbgl00001/planeGame.git 源仓库访问权限:不需要用户名/密码 勾选“我已阅读并同意 《隐私政策声明》 和 《软件开发服务使用声明》” 点击“下一步”按钮 自定义代码仓库名称 其他默认值,最后确认 新建编译构建任务 在“构建&制品”中选择“编译构建”后,新建任务: 步骤1:选择Shell模板,在命令行中输入zip -qr WebGames.zip ./ 步骤2:在Shell下方增加“上传软件包到软件发布库” 构建包路径:WebGames.zip 发布版本号:1.0.0 包名:WebGames 步骤3:新建并执行 新建部署任务 步骤1:进入“控制台”选择“服务列表”购买弹性云服务器ECS,并进行配置; 计费模式:按需收费 区域:华北-北京四 可用区:随机分配 CPU 架构:鲲鹏计算 规格:kai1s.xlarge.1(4 核 4G) 镜像:CentOS 7.6 64bit for Kai1s(40GB) 网络:选择本实验创建的虚拟私有云 安全组:选择本实验创建的安全组 云服务器名称:自定义(如:ecs-plane-kunpeng) 密码:自定义 步骤2:进入华为云DevCloud控制台,选择“部署”->“主机管理”; 添加主机组,输入主机名,选择linux操作系统,点击保存; 添加主机; 输入自定义主机名称,如planewar IP(云服务弹性公网IP) 认证方式:密码 用户名:root 密码:自己云服务器ECS的密码 ssh端口:22 勾选我已阅读…,点击添加 添加成功后,显示验证成功。 步骤3:重新进入部署服务,新建任务,选择Tomcat应用部署模板 点击“选择部署来源”下方的加号,添加“解压文件”,配置: 压缩文件路径:${download_path}/WebGames.zip, 解压目录:${download_path}/WebGames; “参数设置”页中,将以下参数进行修改,其余参数保持默认不变 ${host_group}:ecs_group_planewar(即本实验中创建的主机组) ${package_url}:/WebGames/1.0.0/WebGames.zip Service_port:8080 步骤4:访问应用 释放云资源 本实验需要释放的资源有:弹性云服务器ECS、虚拟私有云和安全组。 步骤1:前往“弹性云服务器ECS”管理控制台,释放资源; 步骤2:前往“虚拟私有云 VPC”管理控制台,先删除所有子网,再删除虚拟私有云; 步骤3:进入“访问控制”中的安全组,删除需要删除的安全组。 点击关注,第一时间了解华为云新鲜技术~

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册