shdocker和vagrant(代码片段)

author author     2022-12-20     672

关键词:

Vagrant
===

使用情境:多人共同維護同一產品,在虛擬機啟動後可立即進行開發。

預期結果:使用 Vagrantfile 執行 shell 腳本,將所需套件及服務裝載完成後並啟動,同時將資料匯入現有資料庫,讓使用者下完 vagrant up 之後便可透過連結特定位址使用該產品,此外亦可透過 NFS 掛載至本機的資料夾進行開發維護。

```
vagrant box add ubuntu <box-file-name>.box
```

在第一次下 vagrant up 的時候會自動下載 box file,但可能會碰到下載速度很慢的情況,此時可以透過 browser 其他較快的方式將檔案下載下來之後,只需透過上述指令即可安裝至本機。(此處以 ubuntu 為例)

> Ref:
> 
> * [Vagrant Mirrors](http://mirrors.hypo.cn/ubuntu-vagrant/)
> * [Vagrant - Mac OSX Setup Guide](http://sourabhbajaj.com/mac-setup/Vagrant/README.html)
> * [Steps to create a Vagrant Base Box with Ubuntu 14.04 Desktop (GUI) and VirtualBox](http://aruizca.com/steps-to-create-a-vagrant-base-box-with-ubuntu-14-04-desktop-gui-and-virtualbox/)

**Forward SSH Key**

By forwarding ssh public key throught ssh agent,that will allow user access private repo inside VM.

```
eval `ssh-agent`
ssh-add ~/.ssh/id_rsa
ssh-add -l
```

Rancher + Docker
===

使用情境:需要快速且大量部署產品,並可實作各服務的負載平衡。

預期結果:使用 Dockerfile 製作客製化映像並推至 registry,再利用 rancher 連結所有服務,最後透過 load balancer 將外部訪問導引至正確的服務上。

**F2E Dockerfile**

```
FROM nginx
ENV NGINX_PORT=80
ADD index.html /usr/share/nginx/html
ADD dist/ /usr/share/nginx/html
```

**API Dockerfile**

```
FROM node:4.4
EXPOSE 8888
ADD server.js /root
CMD ["node", "/root/server.js"]
```

**Diagram**

```
*.domain.name:80 -> f2e:80

                +-----+
       +--------> F2E |
       |        +--+--+
       |           |    service link
       |           |    alias: api
    +--+--+     +--+--+
    | L B |-----> API |
    +-----+     +--+--+
                   |    service link
                   |    alias: db
                +--+--+
                | D B |
                +-----+

*.domain.name:27177 -> db:27017

```
Vagrant.configure(2) do |config|
  config.vm.box = 'ubuntu/xenial64'
  config.vm.network 'forwarded_port', guest: 3000, host: 3000
  config.vm.network 'private_network', ip: '10.10.10.10'
  config.vm.provider 'virtualbox' do |vb|
    vb.name = 'repo_name'
    vb.auto_nat_dns_proxy = false
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "off" ]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off" ]
    vb.memory = '4096'
  end
  config.vm.provision 'shell', path: 'install.sh', privileged: false
  config.vm.provision 'shell', inline: "\
    sudo service redis-server restart
    sudo service postgresql restart
    cd /vagrant && bundle exec rails s -p 3000 -b '0.0.0.0'
  ", run: 'always', privileged: false
  config.ssh.forward_agent = true
end
#!/bin/bash -x

: '
The following libraries will be needed while installing:

* Ruby: graphicsmagick
* Rails: ruby-dev zlib1g-dev liblzma-dev
* PG: libpq-dev
'

PACKAGES_LIST="
build-essential
curl
vim
git
nodejs
graphicsmagick
ruby-dev
zlib1g-dev
liblzma-dev
libpq-dev
redis-server
postgresql
postgresql-contrib
"

PACKAGES=""
for package in $PACKAGES_LIST
do
    PACKAGES="$PACKAGES $package"
done

IS_INSTALLED=.installed

echo "Package Installation Initiated..."

# Install Packages
sudo apt-get update
sudo apt-get install -y $PACKAGES

# Install NVM
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

# Install Node LTS
nvm install --lts
nvm ls

# Request RVM Project Key
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

# Install RVM
curl -sSL https://get.rvm.io | bash -s stable

export PATH="$PATH:/home/ubuntu/.rvm/bin"
source ~/.rvm/scripts/rvm

# Create .ssh folder and know hosts
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keyscan -H github.com >> ~/.ssh/known_hosts

# Grant superuser to current user
sudo -u postgres createuser --superuser $(whoami)

# Install Ruby
rvm install 2.3.1
rvm use 2.3.1 --default

# Install Rails and Bundler
gem install rails bundler

# Install gems, create db and mock data
cd /vagrant && \
bundle install --force && \
bundle exec rake db:create db:migrate db:seed

shdocker别名和函数(代码片段)

查看详情

shdocker:删除所有图像和容器(代码片段)

查看详情

shdocker附加组件机器和组合(代码片段)

查看详情

shdocker:删除所有图像和容器(代码片段)

查看详情

shdocker:删除alle图像和容器(代码片段)

查看详情

shdocker分离,映射端口和名称web(代码片段)

查看详情

shdocker在osx上的配置和使用(代码片段)

查看详情

shdocker片段(代码片段)

查看详情

shdocker帮助(代码片段)

查看详情

shdocker卷(代码片段)

查看详情

shdocker命令(代码片段)

查看详情

shdocker命令(代码片段)

查看详情

shdocker容器(代码片段)

查看详情

shdocker发布(代码片段)

查看详情

shdocker命令(代码片段)

查看详情

shdocker清理(代码片段)

查看详情

shdocker命令(代码片段)

查看详情

shdocker卷(代码片段)

查看详情