{"id":35669,"date":"2023-05-31T10:30:26","date_gmt":"2023-09-26T19:32:19","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/"},"modified":"2024-04-30T06:45:23","modified_gmt":"2024-04-29T22:45:23","slug":"%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX"},"content":{"rendered":"<h2>\u9996\u5148<\/h2>\n<p>\u6211\u6253\u7b97\u81ea\u5df1\u642d\u5efaCICD\u73af\u5883\uff0c\u4e0a\u6b21\u6211\u5c1d\u8bd5\u4f7f\u7528Docker\u542f\u52a8\u4e86GitLab\u3002<br \/>\n\u4e0a\u6b21\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002<br \/>\n\u8fd9\u6b21\u6211\u6253\u7b97\u7528Docker\u542f\u52a8AWX\uff0c\u4e0e\u4e0a\u6b21\u7c7b\u4f3c\u3002<\/p>\n<h2>\u9884\u5148\u51c6\u5907\u5de5\u4f5c<\/h2>\n<p>\u5728\u6784\u5efaAWX\u65f6\uff0c\u514b\u9686Github\/awx\u4ed3\u5e93\uff0c\u5e76\u4f7f\u7528Ansible\u8fdb\u884c\u6784\u5efa\u3002<br \/>\n\u56e0\u6b64\uff0c\u9700\u8981\u5148\u5b89\u88c5Ansible\u3002<br \/>\n\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4\u5b89\u88c5Ansible\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt update\r\n$ sudo apt install software-properties-common\r\n$ sudo apt-add-repository --yes --update ppa:ansible\/ansible\r\n$ sudo apt install ansible\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5\u6240\u9700\u7684\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo pip3 install docker\r\n$ sudo pip3 install docker-compose\r\n<\/code><\/pre>\n<h2>AWX\u542f\u52a8<\/h2>\n<p>\u5c06 Github\/awx \u4ed3\u5e93\u514b\u9686\u5230\u672c\u5730\u3002<\/p>\n<pre class=\"post-pre\"><code>$ git clone https:\/\/github.com\/ansible\/awx -b 17.0.1\r\nCloning into 'awx'...\r\nremote: Enumerating objects: 291225, done.\r\nremote: Counting objects: 100% (120\/120), done.\r\nremote: Compressing objects: 100% (90\/90), done.\r\nremote: Total 291225 (delta 52), reused 51 (delta 23), pack-reused 291105\r\nReceiving objects: 100% (291225\/291225), 247.48 MiB | 5.20 MiB\/s, done.\r\nResolving deltas: 100% (224644\/224644), done.\r\nNote: switching to 'aa4ca300f51781028517397b259319293cd664f8'.\r\n\r\nYou are in 'detached HEAD' state. You can look around, make experimental\r\nchanges and commit them, and you can discard any commits you make in this\r\nstate without impacting any branches by switching back to a branch.\r\n\r\nIf you want to create a new branch to retain commits you create, you may\r\ndo so (now or later) by using -c with the switch command. Example:\r\n\r\n  git switch -c &lt;new-branch-name&gt;\r\n\r\nOr undo this operation with:\r\n\r\n  git switch -\r\n\r\nTurn off this advice by setting config variable advice.detachedHead to false\r\n<\/code><\/pre>\n<p>\u6839\u636e\u9700\u6c42\uff0c\u53ef\u4ee5\u7f16\u8f91awx\/installer\/inventory\u4e2d\u6240\u5217\u7684\u5404\u79cd\u8bbe\u7f6e\u53c2\u6570\u3002<\/p>\n<p>\u8fd9\u6b21\uff0c\u6211\u5220\u9664\u4e86\u4ee5\u4e0b\u53c2\u6570\u7684\u6ce8\u91ca\u3002<\/p>\n<pre class=\"post-pre\"><code># admin_password=password\r\n#project_data_dir=\/var\/lib\/awx\/projects\r\n<\/code><\/pre>\n<p>\u6267\u884c\u514b\u9686\u7684Playbook\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo ansible-playbook -i inventory install.yml\r\n\r\nPLAY [Build and deploy AWX] **************************************************************************************************\r\n\r\nTASK [Gathering Facts] *******************************************************************************************************\r\nok: [localhost]\r\n\r\nTASK [check_vars : admin_password should be defined] *************************************************************************\r\nok: [localhost] =&gt; {\r\n    \"changed\": false,\r\n    \"msg\": \"All assertions passed\"\r\n}\r\n\r\nTASK [check_vars : include_tasks] ********************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [check_vars : include_tasks] ********************************************************************************************\r\nincluded: \/home\/fuku\/awx\/installer\/roles\/check_vars\/tasks\/check_docker.yml for localhost\r\n\r\nTASK [check_vars : postgres_data_dir should be defined] **********************************************************************\r\nok: [localhost] =&gt; {\r\n    \"changed\": false,\r\n    \"msg\": \"All assertions passed\"\r\n}\r\n\r\nTASK [image_build : Set global version if not provided] **********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Verify awx-logos directory exists for official install] **************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Copy logos for inclusion in sdist] ***********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Set awx image name] **************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Render Dockerfile] ***************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Build AWX image] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_build : Tag awx images as latest] ********************************************************************************\r\nskipping: [localhost] =&gt; (item=awx)\r\n\r\nTASK [image_push : Authenticate with Docker registry if registry password given] *********************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_push : Remove awx image] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_push : Tag and push awx image to registry] ***********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [image_push : Set full image path for Registry] *************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Generate broadcast websocket secret] **********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : fail] *****************************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : include_tasks] ********************************************************************************************\r\nskipping: [localhost] =&gt; (item=openshift_auth.yml)\r\nskipping: [localhost] =&gt; (item=openshift.yml)\r\n\r\nTASK [kubernetes : include_tasks] ********************************************************************************************\r\nskipping: [localhost] =&gt; (item=kubernetes_auth.yml)\r\nskipping: [localhost] =&gt; (item=kubernetes.yml)\r\n\r\nTASK [kubernetes : Use kubectl or oc] ****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : set_fact] *************************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Record deployment size] ***********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set expected post-deployment Replicas value] **************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Delete existing Deployment (or StatefulSet)] **************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Get Postgres Service Detail] ******************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Template PostgreSQL Deployment (OpenShift)] ***************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Deploy and Activate Postgres (OpenShift)] *****************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Create Temporary Values File (Kubernetes)] ****************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Populate Temporary Values File (Kubernetes)] **************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Deploy and Activate Postgres (Kubernetes)] ****************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Remove tempfile] ******************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set postgresql hostname to helm package service (Kubernetes)] *********************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for Postgres to activate] ****************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Check if Postgres 10 is being used] ***********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set new pg image] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for change to take affect] ***************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set env var for pg upgrade] *******************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for change to take affect] ***************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set env var for new pg version] ***************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for Postgres to redeploy] ****************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for Postgres to finish upgrading] ********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Unset upgrade env var] ************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for Postgres to redeploy] ****************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set awx image name] ***************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Determine Deployment api version] *************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Get Root CA file contents] ********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Render Root CA template] **********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Apply Root CA template] ***********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set Root CA file name] ************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Set Root CA file location] ********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Render deployment templates] ******************************************************************************\r\nskipping: [localhost] =&gt; (item=None)\r\nskipping: [localhost] =&gt; (item=None)\r\nskipping: [localhost] =&gt; (item=None)\r\nskipping: [localhost] =&gt; (item=None)\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Apply Deployment] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Delete any existing management pod] ***********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Template management pod] **********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Create management pod] ************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Wait for management pod to start] *************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Migrate database] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Check for Tower Super users] ******************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : create django super user if it does not exist] ************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : update django super user password] ************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Create the default organization if it is needed.] *********************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Delete management pod] ************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [kubernetes : Scale up deployment] **************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Generate broadcast websocket secret] ********************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Create ~\/.awx\/pgdocker directory] ***********************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Get full path of postgres data dir] *********************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Register temporary docker container] ********************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Check for existing Postgres data (run from inside the container for access to file)] ********************\r\nfatal: [localhost]: FAILED! =&gt; {\"changed\": true, \"cmd\": \"docker run --rm -v '\/root\/.awx\/pgdocker:\/var\/lib\/postgresql' centos:8 bash -c  \\\"[[ -f \/var\/lib\/postgresql\/10\/data\/PG_VERSION ]] &amp;&amp; echo 'exists'\\\"\\n\", \"delta\": \"0:00:00.932061\", \"end\": \"2021-09-30 00:36:14.111352\", \"msg\": \"non-zero return code\", \"rc\": 1, \"start\": \"2021-09-30 00:36:13.179291\", \"stderr\": \"\", \"stderr_lines\": [], \"stdout\": \"\", \"stdout_lines\": []}\r\n...ignoring\r\n\r\nTASK [local_docker : Record Postgres version] ********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Determine whether to upgrade postgres] ******************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Set up new postgres paths pre-upgrade] ******************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Stop AWX before upgrading postgres] *********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Upgrade Postgres] ***************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Copy old pg_hba.conf] ***********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Remove old data directory] ******************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Export Docker awx image if it isnt local and there isnt a registry defined] *****************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Set docker base path] ***********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Ensure directory exists] ********************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Copy awx image to docker execution] *********************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Load awx image] *****************************************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Set full image path for local install] ******************************************************************\r\nskipping: [localhost]\r\n\r\nTASK [local_docker : Set DockerHub Image Paths] ******************************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Create ~\/.awx\/awxcompose directory] *********************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Create Redis socket directory] **************************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Create Docker Compose Configuration] ********************************************************************\r\nok: [localhost] =&gt; (item={'file': 'environment.sh', 'mode': '0600'})\r\nchanged: [localhost] =&gt; (item={'file': 'credentials.py', 'mode': '0600'})\r\nok: [localhost] =&gt; (item={'file': 'docker-compose.yml', 'mode': '0600'})\r\nok: [localhost] =&gt; (item={'file': 'nginx.conf', 'mode': '0600'})\r\nok: [localhost] =&gt; (item={'file': 'redis.conf', 'mode': '0664'})\r\n\r\nTASK [local_docker : Render SECRET_KEY file] *********************************************************************************\r\nok: [localhost]\r\n\r\nTASK [local_docker : Remove AWX containers before migrating postgres so that the old postgres container does not get used] ***\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Run migrations in task container] ***********************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Start the containers] ***********************************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Update CA trust in awx_web container] *******************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Update CA trust in awx_task container] ******************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [local_docker : Wait for launch script to create user] ******************************************************************\r\nok: [localhost -&gt; localhost]\r\n\r\nTASK [local_docker : Create Preload data] ************************************************************************************\r\nchanged: [localhost]\r\n\r\nPLAY RECAP *******************************************************************************************************************\r\nlocalhost                  : ok=21   changed=9    unreachable=0    failed=0    skipped=73   rescued=0    ignored=1\r\n<\/code><\/pre>\n<p>\u68c0\u67e5Docker\u7684\u8fdb\u7a0b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo docker ps\r\nCONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                   NAMES\r\n01e837a975e2   ansible\/awx:17.0.1   \"\/usr\/bin\/tini -- \/u\u2026\"   3 minutes ago   Up 3 minutes   8052\/tcp                                awx_task\r\nfe969c40a978   ansible\/awx:17.0.1   \"\/usr\/bin\/tini -- \/b\u2026\"   5 minutes ago   Up 3 minutes   0.0.0.0:80-&gt;8052\/tcp, :::80-&gt;8052\/tcp   awx_web\r\n963ecfe82b3a   postgres:12          \"docker-entrypoint.s\u2026\"   5 minutes ago   Up 3 minutes   5432\/tcp                                awx_postgres\r\n277bb5ded009   redis                \"docker-entrypoint.s\u2026\"   5 minutes ago   Up 3 minutes   6379\/tcp                                awx_redis\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d247c37434c4406c2efc4\/17-1.png\" alt=\"image-20210930004409283.png\" \/><\/div>\n<h2>\u6700\u540e<\/h2>\n<p>\u7531\u4e8eGitLab\u548cAWX\u5df2\u7ecf\u6210\u529f\u542f\u52a8\uff0c\u6211\u6253\u7b97\u8bd5\u7740\u4eceAWX\u6267\u884c\u5728GitLab\u4e0a\u63d0\u4ea4\u7684Playbook\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6211\u6253\u7b97\u81ea\u5df1\u642d\u5efaCICD\u73af\u5883\uff0c\u4e0a\u6b21\u6211\u5c1d\u8bd5\u4f7f\u7528Docker\u542f\u52a8\u4e86GitLab\u3002 \u4e0a\u6b21\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u8fd9\u6b21\u6211\u6253 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35669","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u5bb9\u5668\u542f\u52a8awx\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6211\u6253\u7b97\u81ea\u5df1\u642d\u5efaCICD\u73af\u5883\uff0c\u4e0a\u6b21\u6211\u5c1d\u8bd5\u4f7f\u7528Docker\u542f\u52a8\u4e86GitLab\u3002 \u4e0a\u6b21\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u8fd9\u6b21\u6211\u6253 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u5bb9\u5668\u542f\u52a8awx\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-26T19:32:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T22:45:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d247c37434c4406c2efc4\/17-1.png\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/\",\"name\":\"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-09-26T19:32:19+00:00\",\"dateModified\":\"2024-04-29T22:45:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u5bb9\u5668\u542f\u52a8awx\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX","og_description":"\u9996\u5148 \u6211\u6253\u7b97\u81ea\u5df1\u642d\u5efaCICD\u73af\u5883\uff0c\u4e0a\u6b21\u6211\u5c1d\u8bd5\u4f7f\u7528Docker\u542f\u52a8\u4e86GitLab\u3002 \u4e0a\u6b21\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u3002 \u8fd9\u6b21\u6211\u6253 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528docker\u5bb9\u5668\u542f\u52a8awx\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-09-26T19:32:19+00:00","article_modified_time":"2024-04-29T22:45:23+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d247c37434c4406c2efc4\/17-1.png"}],"author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"7 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/","name":"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-09-26T19:32:19+00:00","dateModified":"2024-04-29T22:45:23+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Docker\u5bb9\u5668\u542f\u52a8AWX"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8docker%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8awx%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=35669"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35669\/revisions"}],"predecessor-version":[{"id":90337,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35669\/revisions\/90337"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=35669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=35669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=35669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}