1.
¸ÅÊö
Ôڴ¿ª·¢»·¾³Ê±£¬ÎÒÃǶ¼Ï£Íû´î½¨¹ý³ÌÄܹ»¼òµ¥£¬²¢ÇÒÒ»ÀÍÓÀÒÝ£¬ÆäËûµÄͬÊ¿ÉÒÔ¸´ÓÃÒѾ´î½¨ºÃµÄ¿ª·¢»·¾³ÒÔ½ÚÊ¡¿ª·¢Ê±¼ä¡£¶øÔڴ¿ª·¢»·¾³Ê±£¬ÎÒÃǾ³£»á±»¸´ÔÓµÄÅäÖÃÒÔ¼°Öظ´µÄÏÂÔØ°²×°ËùÀ§ÈÅ¡£ÔÚDocker¼¼Êõδ³öÏÖ֮ǰ£¬ÎÒÃÇ¿ÉÒÔʹÓÃPupet¡¢Chef¡¢AnsibleµÈÅäÖùÜÀí¹¤¾ß°Ñ¸´ÔÓµÄÅäÖùÜÀíÆðÀ´£¬ÕâÑùµÄ¹ÜÀíÅäÖü¼ÊõÈÔÈ»ÊÇĿǰ±È½ÏÁ÷Ðеķ½Ê½Ö®Ò»¡£ÅäÖùÜÀí¹¤¾ßʹÓõͼÊÇ×Ô¼ºµÄDSLÓï·¨¶¨Ò壬¿¼Âǵ½»·¾³µÄ¸´ÔÓÐÔ£¬ÅäÖÃÒ»Ì×ͨÓõĿª·¢»·¾³ÐèÒªÕë¶Ô¸÷¸öϵͳ¶¨ÖÆ£¬¶ÔÓڴ󲿷ֿª·¢»·¾³ÕâÖÖά»¤³É±¾ÈÔÈ»ÊǺܸߵġ£Docker¼¼Êõ³öÏÖÖ®ºó£¬ÏµÍ³µÄÒÀÀµÎÊÌâµÃµ½Á˳¹µ×µÄ½â¾ö£¬ÎÒÃÇ¿ÉÒÔͨ¹ý¾µÏñµÄ·½Ê½¼ò»¯»·¾³µÄ°²×°¡£½áºÏDockerµÄ¿ª·¢²¿Ê𹤾ßFig£¬ÎÒÃÇ¿ÉÒÔʹÓÃfig.ymlÎļþÀ´¶¨ÒåËùÓеĻ·¾³£¬Ò»´Î¶¨Ò壬¶à´¦Ê¹Ó㬼òµ¥¶øÇÒ¸ßЧ¡£

1.1 ´ò°üµÄ·½Ê½
Docker±¾Ê¡²¢²»ÄÜ´´½¨Ò»¸öÕæÊµµÄÐéÄâ»ú£¬ËüÖ»ÊÇ»ùÓÚLinux Kernel°Ñ¶îÍâµÄϵͳÎļþ×öÁË·â×°£¬²¢ÀûÓÃLinux
KernelÏà¹ØµÄ¼¼ÊõÈçCgroup¡¢Namespace¸ôÀëÓû§Ó¦Óá£Ó¦ÓÃDocker¼¼Êõ£¬ÍŶÓÖ®¼äͨ¹ý¹²ÏíImage»òÕßDockefileÀ´¸´Óÿª·¢»·¾³¡£ÎªÁ˼ò»¯Ð´DockerfileµÄ·½Ê½
£¬FigÌṩ¸ü¼Ó¾«¼òµÄDSL¶¨ÒåÎļþfig.yml£¬¿ÉÒÔÈÃгÉÔ±¿ìËٴ¿ª·¢»·¾³²¢½«¾«Á¦Í¶Èëµ½¿ª·¢¹ý³ÌÖÐÈ¥£¬¶ø²»ÊÇÑо¿ÈçºÎÕýÈ·°²×°²¢ÅäÖÃÖîÈçPostgreSQLÖ®ÀàµÄÊý¾Ý¿â¡£Ä¿Ç°£¬Èí¼þ¿ª·¢ÐèÒªµÄ»·¾³Image£¬´ó²¿·Ö¶¼¿ÉÒÔÔÚDocker
HubÖÐËÑË÷µ½£¬ÐèҪʹÓÃʱֱ½ÓÏÂÔØ¾Í¿ÉÒÔʹÓá£
1.2 Ó¦ÓÃ×éºÏµÄ·½Ê½
ʹÓÃDockerÖ®ºó£¬ÎÒÃDz»ÔÙÐèÒªÔÚ±¾µØ»úÆ÷°²×°ËùÓеÄÈí¼þ°ü¡£ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÏîÄ¿ÐèÒªÔÚDocker HubÉÏËÑË÷Ïà¹ØÈí¼þµÄImage£¬È»ºóʹÓÃFig
pull´ÓDocker HubÉÏÖ±½ÓÏÂÔØ²¢ÓÉFigµ÷ÓÃDockerµÄLinkÃüÁî°ÑImage¹ØÁªÆðÀ´£¬ÕâÑùËùÓÐÓ¦Óö¼¿ÉÒÔÖ±½Óµ÷ÓÃÖ¸¶¨¶Ë¿ÚµÄ·þÎñ£¬±ÈÈçMysqlµÄ3306¶Ë¿ÚÌṩÊý¾Ý¿â·þÎñ¡£¿ª·¢Õß²¢²»ÐèÒª¶ÔDockerÓÐÌ«¶àµÄÁ˽⣬ֻÐèÒªÕÆÎÕ³£Óõļ¸ÌõFigÃüÁî¾Í¿ÉÒÔËæÊ±µ÷ÊÔ×Ô¼ºµÄ»·¾³¡£
1.3 »·¾³¹²ÏíµÄ·½Ê½
FigÖ±½Ó¶¨ÒåºÃÁËImage£¬ÎÒÃDz»ÐèÒª¹ý¶àµÄ¹ØÐÄÈÝÆ÷»òÕß¾µÏñ¡£ÔÚ·ÖÏí»·¾³Ê±£¬Ö»ÐèÒª°Ñ¶ÔÓ¦µÄDockerfileºÍfig.ymlÎļþ·ÖÏí¸øÍ¬Ê£¬ËûÃǾͿÉÒÔÔÚ×Ô¼ºµÄ»úÆ÷ÉÏÔËÐв¢´î½¨³öÐèÒªµÄ»·¾³£¬ÇÒ²»ÓÃÔÙµ£ÐÄ»·¾³ÒÀÀµ´øÀ´µÄÒâÍâµ÷ÊÔ·³ÄÕ¡£ÍŶӳÉÔ±ÔÚgit
cloneÏîÄ¿´úÂëºó£¬¾Í¿ÉÒÔÈçÏÂͼһÑùʹÓÃÒ»ÌõÃüÁîÆô¶¯×Ô¼ºµÄ¿ª·¢»·¾³£º

2. Fig°²×°Ö¸ÄÏ
Ê×ÏÈ£¬ÎÒÃÇÐèÒª°²×°Docker Engine£¬¹Ù·½Õë¶ÔÖ÷Á÷µÄϵͳÌṩÁ˶ÔÓ¦µÄ°²×°ÊֲᡣÕâÀÎҵĿª·¢»úϵͳÊÇһ̨MacBook
Pro£¬ËùÒÔÎÒÐèÒª°²×°boot2dockerÀ´Ö§³ÖDocker¡£
½ÓÏÂÀ´£¬ÎÒÃǾͿÉÒÔ°²×°¶ÔӦϵͳ°æ±¾µÄFigÔËÐÐÎļþ¡£±ÈÈçÔÚMac OS»òÕßÔÚ64λµÄLinuxÉϰ²×°Fig£º
$ curl -L https://github.com/docker/fig/releases/download/1.0.0/fig-`uname -s`-`uname -m` > /usr/local/bin/fig; chmod +x /usr/local/bin/fig |
µ±ÒÔÉϵݲװ·½Ê½²»Äܳɹ¦µÄ»°£¬ÎÒÃÇ¿ÉÒÔÑ¡ÔñʹÓÃPython PackageµÄ°²×°·½Ê½£º
$ sudo pip install -U fig |
×îºó£¬²»¹ÜʹÓÃʲôLinuxϵͳ£¬°²×°ÍêFigÖ®ºóͨ¹ýÔËÐÐÒÔÏÂÃüÁîÀ´È·±£»·¾³µÄÒ»ÖÂÐÔ¡£
Èç¹ûÒ»ÇÐ˳ÀûµÄ»°£¬¹§Ï²Ä㣬Fig°²×°³É¹¦ÁË¡£ÏÂÃæÇëËæÎÒÒ»ÆðѧϰÈçºÎʹÓÃFigÅäÖÿª·¢»·¾³¡£
3. Rails¿ª·¢»·¾³ÅäÖÃÏê½â
ÎÒÃÇÀ´ÅäÖÃÒ»Ì××î³£ÓõÄRails+PostgreSQLÏîÄ¿¡£
µÚÒ»²½£¬È·±£FigÒѾÕýÈ·µÄ°²×°µ½Ö÷»úϵͳ£¬Èç¹û»¹Ã»ÓУ¬Çë²Î¿¼ÉÏÒ»Õ½ڵݲװָÄÏ¡£
µÚ¶þ²½£¬ÔÚÏîÄ¿¸ùĿ¼Ï´æ·ÅÒ»¸öÃûΪ Dockerfile Îļþ£º
FROM ruby RUN apt-get update -qq && apt-get install -y build-essential libpq-dev RUN mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile RUN bundle install ADD . /myapp |
µÚÈý²½£¬´´½¨Ò»¸ö Gemfile ÎļþÓÃÀ´¶¨ÒåRailsÈí¼þ°ü¡£ ÄÚÈÝÈçÏÂËùʾ£º
source 'https://rubygems.org' gem 'rails', '4.0.2' |
µÚËIJ½£¬´´½¨Ò»¸öfig.ymlÎļþ£¬²¢Ê¹ÓÃÒÔÏÂÅäÖÃÎļþÀ´×ö×îºóµÄ»·¾³³õʼ»¯¡£
db: image: postgres ports: - "5432" web: build: . command: bundle exec rackup -p 3000 volumes: - .:/myapp ports: - "3000:3000" links: - db |
µÚÎå²½£¬µ±Ç°ÄãĿ¼Ï¿տÕÈçÒ²£¬Ê¹ÓÃÈçÏÂÃüÁî¿ÉÒÔÉú³ÉÒ»Ì×RailsÏîÄ¿¹Ç¼Ü£º
$ fig run web rails new . --force --database=postgresql --skip-bundle |
µ±ÄãÅÜÍêÒÔÉÏÃüÁÄã¾Í»áµÃµ½Ò»¸öոеÄRailsÏîÄ¿¡£
$ ls Dockerfile Rakefile config fig.yml public vendor Gemfile app config.ru lib test README.rdoc bin db log tmp |
±à¼Ò»ÏÂGemfileÎļþ£¬È¥µôtherubyracer°üµÄ×¢ÊÍ, ÈÃRailsÒÀÀµµÄJavascriptµÄÔËÐÐʱ»·¾³¡£
gem 'therubyracer', platforms: :ruby |
ËùÓеÄÎļþ±à¼¶¼×öÍêÖ®ºó£¬ÔËÐÐÃüÁî´´½¨¿ª·¢»·¾³image¡£
ÔËÐÐÍêbuildÃüÁîºó£¬ÎÒÃǾÍÓÐÁË¿ÉÒÔÁ¢¼´Ê¹ÓõÄImage¡£ÕâÁ½¸öImageµÄÃû×Ö·Ö±ðÊÇwebºÍdb¡£ÎªÁËÈÃdbÄÜÁ¬ÉÏweb£¬ÎÒÃÇͨ³£»¹ÐèÒªÐÞ¸Ädatabase.ymlÀ´Ö§³ÖÊý¾Ý¿âÁ¬½Ó¡£
development: &default adapter: postgresql encoding: unicode database: postgres pool:
5 username: postgres password: host: db test: <<: *default database: myapp_test |
ºÃÁË£¬ÈÃÎÒÃÇÔËÐÐһϣº
ÃüÁîÐн«ÏÔʾÈçÏÂÈÕÖ¾£º
Recreating figtest_db_1... Creating figtest_web_1... Attaching to figtest_db_1, figtest_web_1 db_1 | LOG: database system was shut down at 2014-10-01 23:53:11 UTC db_1 | LOG: autovacuum launcher started db_1 | LOG: database system is ready to accept connections web_1 | [2014-10-01 23:53:16] INFO WEBrick 1.3.1 web_1 | [2014-10-01 23:53:16] INFO ruby 2.1.2 (2014-05-08) [x86_64-linux] web_1 | [2014-10-01 23:53:16] INFO WEBrick::HTTPServer#start: pid=1 port=3000 db_1 | FATAL: database "myapp_development" does not exist db_1 | FATAL: database "myapp_development" does not exist web_1 | 192.168.59.3 - - [01/Oct/2014 23:53:40] "GET / HTTP/1.1" 500 13476 0.5112 web_1 | 192.168.59.3 - - [01/Oct/2014 23:53:40] "GET %2Ffavicon.ico HTTP/1.1" 200 - 0.0067
|
ͨ¹ýÒÔÉÏÈÕÖ¾¿ÉÒÔÖªµÀ¿ª·¢Êý¾Ý¿â»¹Ã»Óд´½¨¡£ÕâʱÎÒÃÇ¿ÉÒÔ¿ªÆôÁíÍâÒ»¸öterminal£¬´´½¨¿ª·¢Êý¾Ý¿â£º
$ fig run web rake db:create |
µ±ÒÔÉÏËùÓв½Öè¶¼³É¹¦ÔËÐк󣬾ÍÐèÒªÀ´ÑéÖ¤¿ª·¢»·¾³µÄÕýÈ·ÐÔÁË¡£Í¨¹ý·ÃÎÊhttp://localhost:3000/
ÎÒÃÇÓ¦¸Ã¿ÉÒÔ¿´µ½ÊìϤµÄRails»¶ÓÒ³Ãæ£º

4. Django¿ª·¢»·¾³ÅäÖÃÏê½â
½ÓÏÂÀ´ÈÃÎÒÃÇʹÓÃFigÀ´ÅäÖÃÒ»Ì×ÔËÐÐDjango/PostgreSQLµÄÓ¦ÓóÌÐò°É¡£
Ê×ÏÈÎÒÃÇн¨Ò»¸öÏîĿĿ¼£¬²¢ÔÚĿ¼Àï´´½¨3¸öÎļþ¡£µÚÒ»¸öÎļþÊÇDocker¾µÏñµÄ¶¨ÒåÎļþ: Dockerfile£¬ÓÃÀ´ÃèÊö°²×°ÔÚDockerÈÝÆ÷ÀïÈí¼þÒÀÀµ¹ØÏµ¡£ÎļþÈçÏ£º
FROM python:2.7 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
|
ÒÔÉÏÎļþÃèÊöÕâ¸öImage½«°²×°requirements.txtÖ¸¶¨µÄpythonÒÀÀµ°ü¡£
µÚ¶þ¸öÎļþÊÇrequirements.txt£¬ËüÊÇpythonÒÀÀµ°ü¶¨ÒåÃèÊöÎļþ£¬ÄÚÈÝÈçÏ£º
×îºó£¬FigÐèÒª°ÑËùÓеĻ·¾³¶¼Á¬½ÓÆðÀ´ÔËÐС£Õâ¸öÎļþÃûΪ fig.yml ¡£ËüÃèÊöÏîÄ¿ÐèÒªµÄ·þÎñ×é¼þ¡¢Ö¸¶¨¾µÏñµÄ°æ±¾¡¢ÈçºÎÁ¬½Ó·þÎñ¡¢Ê²Ã´¾í¿ÉÒÔ±»ÔØÈëÈÝÆ÷ÄÚ²¿¡¢Ê²Ã´¶Ë¿Ú¿ÉÒÔ±©Â¶³öÀ´µÈ¡£ÄÚÈÝÐÎÈ磺
db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" links: - db
|
µ½´Ë´¦£¬ÎÒÃǾͿÉÒÔʹÓà fig run À´´´½¨Ò»¸öDjangoÏîÄ¿ÁË£º
$ fig run web django-admin.py startproject figexample . |
µ±ÄãÔËÐÐÍêÖ®ºó£¬¿ÉÒÔÔÚµ±Ç°Ä¿Â¼Ï¿´µ½´´½¨µÄÐÂÏîÄ¿Îļþ£º
$ ls Dockerfile fig.yml figexample manage.py requirements.txt |
½ÓÏÂÀ´µÄÊÂÇé¾ÍÊÇ´´½¨Êý¾Ý¿âÁ´½Ó£¬ÐÞ¸Ä figexample/settings.py µÄDATABASES
= ...²¿·Ö¡£
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }
|
Õâ¸öÅäÖÃÐÅÏ¢ÊÇÓÃÀ´Á¬½Ópostgres¾µÏñ·þÎñ¡£
È»ºó£¬ÔËÐÐÃüÁî fig upÀ´Æô¶¯ÈÝÆ÷¡£
Recreating myapp_db_1... Recreating myapp_web_1... Attaching to myapp_db_1, myapp_web_1 myapp_db_1 | myapp_db_1 | PostgreSQL stand-alone backend 9.1.11 myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: database system is ready to accept connections myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: autovacuum launcher started myapp_web_1 | Validating models... myapp_web_1 | myapp_web_1 | 0 errors found myapp_web_1 | January 27, 2014 - 12:12:40 myapp_web_1 | Django version 1.6.1, using settings 'figexample.settings' myapp_web_1 | Starting development server at http://0.0.0.0:8000/ myapp_web_1 | Quit the server with CONTROL-C.
|
Õâ¸öʱºò£¬Äã¿ÉÒÔ¿ªÆôä¯ÀÀÆ÷£¬È»ºóÊäÈë localhost:8000 ¾Í¿ÉÒÔ·ÃÎÊÕâ¸öDjangoÓ¦Óá£
×¢Ò⣬µ±ÄãÅÜÆðÀ´Ó¦ÓÃÖ®ºó£¬¾Í¿ÉÒÔ³õʼ»¯Êý¾Ý¿âÁË¡£ÕâÀÇëÒ»¶¨Òª±£Ö¤fig
upÊÇÔÚÔËÐÐÖУ¬²¢ÁíÍ⿪ÆôÒ»¸öÃüÁîÐд°¿ÚÖ´ÐÐÒ»ÏÂÃüÁ
$ fig run web python manage.py syncdb |
Èç¹ûÄã·´¸´Ê¹ÓÃÁËfig upÖ®ºó£¬¿ÉÒÔÌå»áµ½ËüÒ»´ÎÐÔ»á°ÑwebºÍdbÁ½¸ö¾µÏñÒ»ÆðÆô¶¯£¬Èç¹ûÄãCONTROL-CÖ®ºó£¬Êý¾Ý¿âÒ²»áÍ£Ö¹·þÎñ¡£ÄãÉõÖÁ¿ÉÒÔfig
run web /bin/bashµÄ·½Ê½Ö±½Ó½øÈëµ½ÈÝÆ÷Àï¿´¿´¡£
5. Wordpress¿ª·¢»·¾³ÅäÖÃÏê½â
FigÒ»Ñù¿ÉÒÔÓ¦¸¶PHPÓ¦ÓõĿª·¢ÐèÇó¡£
Ê×ÏÈ£¬´´½¨Ò»¸öDockerfileÀ´Ö§³ÖÉú³É¿ª·¢ÓÃImage¡£
$ curl https://wordpress.org/latest.tar.gz | tar -xvzf - |
ÒÔÉÏÕâÌõÃüÁî´´½¨ÃûΪ wordpress µÄĿ¼¡£½øÈëµ½´ËĿ¼£¬´´½¨¾µÏñÎļþ Dockerfile£¬ÄÚÈÝÈçÏ£º
FROM stackbrew/ubuntu:13.10 RUN apt-get update && apt-get install php5 php5-mysql -y ADD . /code |
ÏÂÒ»²½´´½¨ fig.yml£¬Ëü½«¶¨Òå³öweb·þÎñºÍmysql db·þÎñ¡£
web: build: . command: php -S 0.0.0.0:8000 -t /code ports: - "8000:8000" links: - db volumes: - .:/code db: image: mysql environment: MYSQL_DATABASE: wordpress MYSQL_ROOT_PASSWORD: wordpress
|
wordpressÓÐÒ»¸öÖ§³ÖÎļþÐèÒªÐ޸ģ¬ËüÊÇwp-config.php:
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', 'wordpress'); define('DB_HOST', getenv("DB_1_PORT_3306_TCP_ADDR") . ":" . getenv("DB_1_PORT_3306_TCP_PORT")); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', '');
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase
here');
define('LOGGED_IN_KEY', 'put your unique phrase
here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase
here');
define('LOGGED_IN_SALT', 'put your unique phrase
here');
define('NONCE_SALT', 'put your unique phrase here');
$table_prefix = 'wp_';
define('WPLANG', '');
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
|
ÒÔÉÏÈý¸öÎļþ¶¼Ð޸ĺ󣬾ͿÉÒÔÔÚ´ËĿ¼ÏÂÔËÐÐ fig upÀ´Æô¶¯wordpress¡£¿ÉÒÔʹÓÃä¯ÀÀÆ÷·ÃÎÊlocalhost:8000
ä¯ÀÀWordpressÊ×Ò³¡£

6. ½áÂÛ
ͨ¹ýFigÀ´¹¹½¨»ùÓÚDockerµÄ¿ª·¢»·¾³¿ÉÒÔÈÃÎÒÃǵĿª·¢Ê°빦±¶¡£ÆäʵÈç¹û¶ÁÕß°´ÕÕÎҵIJ½ÖèÒ»²½Ò»²½´î½¨¿ª·¢»·¾³£¬ÈÔÈ»»áÓкܶàÌôÕ½¡£
Ê×ÏÈ£¬ÒòΪ¹úÄÚ´ø¿íµÄÏÞÖÆ£¬´Ó¹Ù·½ÏÂÔØImageÊÇÒ»¸ö³¤Ê±¼äµÈ´ýµÄ¹ý³Ì¡£¼´Ê¹Docker¹«Ë¾ÒѾʹÓÃÁËCDN·þÎñ£¬µ«ÔÚ¹úÄÚÍøÂçʹÓÃÈÔÈ»ºÜÂý¡£ÎªÁËÄÜ¿ìËÙÏÂÔØ£¬ÎÒ»¹³£±¸Ò»ÌõVPNÏß·×÷ΪÊý¾ÝͨµÀÀ´ÏÂÔØImage¡£Ä¿Ç°ÕâÊÇ×îÀíÏëµÄ·½Ê½£¬¿ÉÒÔ½ÚÊ¡ºÜ¶à¿ª·¢Ê±¼ä¡£
µÚ¶þ£¬fig up²¢²»Äܱ£Ö¤ImageÄÜÒ»´Î³É¹¦¡£µ«²»ÐèÒª»ÒÐÄ¡£Äã¿ÉÒÔfig run web /bin/bashÖ±½Óµ½ÈÝÆ÷ÀïÃæµ÷ÊÔ¡£ÎÒÓöµ½¹ý¶à´Î·Ñ½âµÄÎÊÌâ¶¼ÊÇÖ±½ÓÔÚÀïÃæÅÜÃüÁî½â¾öµÄ¡£µ±ÄãÍ˳öʱ£¬fig»á×Ô¶¯¸üе½ÏàÓ¦µÄImageÀï¡£µ±ÄãÔÙ´Îfig
up£¬Ëü»áʹÓÃÐÂImageÈ¥´´½¨Õâ¸öÔËÐÐÈÝÆ÷¡£
µÚÈý£¬fig up»á´´½¨Á½¸öÒÔÉϵÄÈÝÆ÷ʵÀý£¬ÔÚÍ˳öÈÝÆ÷ºóÔÙ´ÎÆô¶¯fig up£¬²¢²»»áÖØÓÃ֮ǰÍ˳öµÄÈÝÆ÷ʵÀý£¬¶øÊÇн¨ÈÝÆ÷ʵÀý¡£Ïñfig
upÕâÀà³£ÓÃÃüÁîÔËÐжà´ÎÖ®ºó»áµ¼Ö¹ýÆÚµÄÈÝÆ÷ÎļþÈÔÈ»´æ´¢ÔÚÄãµÄ¿ª·¢»úÆ÷Éϲ¢Õ¼ÓÃÓ²Å̿ռ䣬²¢ÇÒFig»¹Ã»ÓÐÌṩ¶ÔÓ¦µÄÃüÁî×Ô¶¯ÇåÀíËüÃÇ¡£Ä¿Ç°¿ÉÒÔ½â¾öµÄ°ì·¨ÊÇÖ±½ÓʹÓÃDocker
rm/rmiÃüÁîÊÖ¹¤Çå³ý¡£
ÒÔÉÏ×ܽá³öµÄʵս¾Ñ飬ÈÔÈ»²»ÄÜÑÚ¸ÇFigÌØÓеÄÁÁµã£ºÔËÓÃFig¿ÉÒÔ¶¨ÒåͳһÔËÐв½Ö裬Èò¿Êð»·¾³¿ÉÒÔÍêÈ«µÄ¸ôÀëÔÚÒ»¸ö¶ÀÁ¢µÄÈÝÆ÷»·¾³À²¢ÇÒÕâ¸ö¸ôÀë»·¾³¿ÉÒÔÔÚ¿ª·¢¡¢²âÊÔ¡¢Éú²ú¶à¸ö²½ÖèÖб£³ÖÒ»Ö¡£µ±Ç°FigÏîÄ¿»¹ºÜÄêÇᣬÐèÒª´ó¼Ò¶à²ÎÓëÏîÄ¿µÄÌÖÂÛ£¬Ìá³ö×Ô¼ºµÄÎÊÌâ²ÅÄÜÈÃFig¸üºÃʹÓ㬸ü¶àÐÅÏ¢¿ÉÒÔµ½ÕâÀï²éÔÄ¡£
|