mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fixed remaining issues and conflicts created by last merge.
This commit is contained in:
commit
1ddca1948b
18 changed files with 255 additions and 156 deletions
77
CHANGELOG.md
Normal file
77
CHANGELOG.md
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 0.1.8 (2013-04-22)
|
||||||
|
- Dynamically detect cgroup capabilities
|
||||||
|
- Issue stability warning on kernels <3.8
|
||||||
|
- 'docker push' buffers on disk instead of memory
|
||||||
|
- Fix 'docker diff' for removed files
|
||||||
|
- Fix 'docker stop' for ghost containers
|
||||||
|
- Fix handling of pidfile
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
|
||||||
|
## 0.1.7 (2013-04-18)
|
||||||
|
- Container ports are available on localhost
|
||||||
|
- 'docker ps' shows allocated TCP ports
|
||||||
|
- Contributors can run 'make hack' to start a continuous integration VM
|
||||||
|
- Streamline ubuntu packaging & uploading
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
|
||||||
|
## 0.1.6 (2013-04-17)
|
||||||
|
- Record the author an image with 'docker commit -author'
|
||||||
|
|
||||||
|
## 0.1.5 (2013-04-17)
|
||||||
|
- Disable standalone mode
|
||||||
|
- Use a custom DNS resolver with 'docker -d -dns'
|
||||||
|
- Detect ghost containers
|
||||||
|
- Improve diagnosis of missing system capabilities
|
||||||
|
- Allow disabling memory limits at compile time
|
||||||
|
- Add debian packaging
|
||||||
|
- Documentation: installing on Arch Linux
|
||||||
|
- Documentation: running Redis on docker
|
||||||
|
- Fixed lxc 0.9 compatibility
|
||||||
|
- Automatically load aufs module
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
|
||||||
|
## 0.1.4 (2013-04-09)
|
||||||
|
- Full support for TTY emulation
|
||||||
|
- Detach from a TTY session with the escape sequence `C-p C-q`
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
- Minor UI improvements
|
||||||
|
- Automatically create our own bridge interface 'docker0'
|
||||||
|
|
||||||
|
## 0.1.3 (2013-04-04)
|
||||||
|
- Choose TCP frontend port with '-p :PORT'
|
||||||
|
- Layer format is versioned
|
||||||
|
- Major reliability improvements to the process manager
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
|
||||||
|
## 0.1.2 (2013-04-03)
|
||||||
|
- Set container hostname with 'docker run -h'
|
||||||
|
- Selective attach at run with 'docker run -a [stdin[,stdout[,stderr]]]'
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
- UI polish
|
||||||
|
- Progress bar on push/pull
|
||||||
|
- Use XZ compression by default
|
||||||
|
- Make IP allocator lazy
|
||||||
|
|
||||||
|
## 0.1.1 (2013-03-31)
|
||||||
|
- Display shorthand IDs for convenience
|
||||||
|
- Stabilize process management
|
||||||
|
- Layers can include a commit message
|
||||||
|
- Simplified 'docker attach'
|
||||||
|
- Fixed support for re-attaching
|
||||||
|
- Various bugfixes and stability improvements
|
||||||
|
- Auto-download at run
|
||||||
|
- Auto-login on push
|
||||||
|
- Beefed up documentation
|
||||||
|
|
||||||
|
## 0.1.0 (2013-03-23)
|
||||||
|
- First release
|
||||||
|
- Implement registry in order to push/pull images
|
||||||
|
- TCP port allocation
|
||||||
|
- Fix termcaps on Linux
|
||||||
|
- Add documentation
|
||||||
|
- Add Vagrant support with Vagrantfile
|
||||||
|
- Add unit tests
|
||||||
|
- Add repository/tags to ease image management
|
||||||
|
- Improve the layer implementation
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
const VERSION = "0.1.7"
|
const VERSION = "0.1.8"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
GIT_COMMIT string
|
GIT_COMMIT string
|
||||||
|
@ -836,6 +836,10 @@ func (srv *Server) CmdAttach(stdin io.ReadCloser, stdout rcli.DockerConn, args .
|
||||||
return fmt.Errorf("No such container: %s", name)
|
return fmt.Errorf("No such container: %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if container.State.Ghost {
|
||||||
|
return fmt.Errorf("Impossible to attach to a ghost container")
|
||||||
|
}
|
||||||
|
|
||||||
if container.Config.Tty {
|
if container.Config.Tty {
|
||||||
stdout.SetOptionRawTerminal()
|
stdout.SetOptionRawTerminal()
|
||||||
}
|
}
|
||||||
|
|
39
container.go
39
container.go
|
@ -530,16 +530,42 @@ func (container *Container) releaseNetwork() {
|
||||||
container.NetworkSettings = &NetworkSettings{}
|
container.NetworkSettings = &NetworkSettings{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: replace this with a control socket within docker-init
|
||||||
|
func (container *Container) waitLxc() error {
|
||||||
|
for {
|
||||||
|
if output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput(); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
if !strings.Contains(string(output), "RUNNING") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (container *Container) monitor() {
|
func (container *Container) monitor() {
|
||||||
// Wait for the program to exit
|
// Wait for the program to exit
|
||||||
Debugf("Waiting for process")
|
Debugf("Waiting for process")
|
||||||
|
|
||||||
|
// If the command does not exists, try to wait via lxc
|
||||||
|
if container.cmd == nil {
|
||||||
|
if err := container.waitLxc(); err != nil {
|
||||||
|
Debugf("%s: Process: %s", container.Id, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if err := container.cmd.Wait(); err != nil {
|
if err := container.cmd.Wait(); err != nil {
|
||||||
// Discard the error as any signals or non 0 returns will generate an error
|
// Discard the error as any signals or non 0 returns will generate an error
|
||||||
Debugf("%s: Process: %s", container.Id, err)
|
Debugf("%s: Process: %s", container.Id, err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Debugf("Process finished")
|
Debugf("Process finished")
|
||||||
|
|
||||||
exitCode := container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
|
var exitCode int = -1
|
||||||
|
if container.cmd != nil {
|
||||||
|
exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
|
||||||
|
}
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
container.releaseNetwork()
|
container.releaseNetwork()
|
||||||
|
@ -588,7 +614,7 @@ func (container *Container) monitor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (container *Container) kill() error {
|
func (container *Container) kill() error {
|
||||||
if !container.State.Running || container.cmd == nil {
|
if !container.State.Running {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,6 +626,9 @@ func (container *Container) kill() error {
|
||||||
|
|
||||||
// 2. Wait for the process to die, in last resort, try to kill the process directly
|
// 2. Wait for the process to die, in last resort, try to kill the process directly
|
||||||
if err := container.WaitTimeout(10 * time.Second); err != nil {
|
if err := container.WaitTimeout(10 * time.Second); err != nil {
|
||||||
|
if container.cmd == nil {
|
||||||
|
return fmt.Errorf("lxc-kill failed, impossible to kill the container %s", container.Id)
|
||||||
|
}
|
||||||
log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.Id)
|
log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.Id)
|
||||||
if err := container.cmd.Process.Kill(); err != nil {
|
if err := container.cmd.Process.Kill(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -617,9 +646,6 @@ func (container *Container) Kill() error {
|
||||||
if !container.State.Running {
|
if !container.State.Running {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if container.State.Ghost {
|
|
||||||
return fmt.Errorf("Can't kill ghost container")
|
|
||||||
}
|
|
||||||
return container.kill()
|
return container.kill()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,9 +655,6 @@ func (container *Container) Stop(seconds int) error {
|
||||||
if !container.State.Running {
|
if !container.State.Running {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if container.State.Ghost {
|
|
||||||
return fmt.Errorf("Can't stop ghost container")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. Send a SIGTERM
|
// 1. Send a SIGTERM
|
||||||
if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil {
|
if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil {
|
||||||
|
|
|
@ -10,7 +10,7 @@ Building blocks
|
||||||
|
|
||||||
Images
|
Images
|
||||||
------
|
------
|
||||||
An original container image. These are stored on disk and are comparable with what you normally expect from a stoppped virtual machine image. Images are stored (and retrieved from) repository
|
An original container image. These are stored on disk and are comparable with what you normally expect from a stopped virtual machine image. Images are stored (and retrieved from) repository
|
||||||
|
|
||||||
Images are stored on your local file system under /var/lib/docker/images
|
Images are stored on your local file system under /var/lib/docker/images
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ Save the changed we just made in the container to a new image called "_/builds/g
|
||||||
WEB_WORKER=$(docker run -d -p 5000 $BUILD_IMG /usr/local/bin/runapp)
|
WEB_WORKER=$(docker run -d -p 5000 $BUILD_IMG /usr/local/bin/runapp)
|
||||||
|
|
||||||
- **"docker run -d "** run a command in a new container. We pass "-d" so it runs as a daemon.
|
- **"docker run -d "** run a command in a new container. We pass "-d" so it runs as a daemon.
|
||||||
**"-p 5000"* the web app is going to listen on this port, so it must be mapped from the container to the host system.
|
- **"-p 5000"** the web app is going to listen on this port, so it must be mapped from the container to the host system.
|
||||||
- **"$BUILD_IMG"** is the image we want to run the command inside of.
|
- **"$BUILD_IMG"** is the image we want to run the command inside of.
|
||||||
- **/usr/local/bin/runapp** is the command which starts the web app.
|
- **/usr/local/bin/runapp** is the command which starts the web app.
|
||||||
|
|
||||||
|
|
|
@ -71,40 +71,38 @@
|
||||||
<h2>
|
<h2>
|
||||||
<a name="installing-on-ubuntu-1204-and-1210" class="anchor" href="#installing-on-ubuntu-1204-and-1210"><span class="mini-icon mini-icon-link"></span>
|
<a name="installing-on-ubuntu-1204-and-1210" class="anchor" href="#installing-on-ubuntu-1204-and-1210"><span class="mini-icon mini-icon-link"></span>
|
||||||
</a>Installing on Ubuntu</h2>
|
</a>Installing on Ubuntu</h2>
|
||||||
<strong>Requirements</strong>
|
|
||||||
|
<p><strong>Requirements</strong></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Ubuntu 12.04 (LTS) or Ubuntu 12.10</li>
|
<li>Ubuntu 12.04 (LTS) (64-bit)</li>
|
||||||
<li><strong>64-bit Operating system</strong></li>
|
<li> or Ubuntu 12.10 (quantal) (64-bit)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ol>
|
<ol>
|
||||||
<li>
|
<li>
|
||||||
<p>Add the Ubuntu PPA (Personal Package Archive) sources to your apt sources list. Copy and
|
<p><strong>Install dependencies</strong></p>
|
||||||
paste the following lines at once.</p>
|
The linux-image-extra package is only needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
|
||||||
|
<pre>sudo apt-get install linux-image-extra-`uname -r`</pre>
|
||||||
|
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>Install Docker</strong></p>
|
||||||
|
<p>Add the Ubuntu PPA (Personal Package Archive) sources to your apt sources list, update and install.</p>
|
||||||
|
<p>You may see some warnings that the GPG keys cannot be verified.</p>
|
||||||
<div class="highlight">
|
<div class="highlight">
|
||||||
<pre>sudo sh -c "echo 'deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main' >> /etc/apt/sources.list"</pre>
|
<pre>sudo sh -c "echo 'deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main' >> /etc/apt/sources.list"</pre>
|
||||||
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>Update your sources. You will see a warning that GPG signatures cannot be verified.</p>
|
|
||||||
|
|
||||||
<div class="highlight">
|
|
||||||
<pre>sudo apt-get update</pre>
|
<pre>sudo apt-get update</pre>
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>Now install it, you will see another warning that the package cannot be authenticated. Confirm install.</p>
|
|
||||||
|
|
||||||
<div class="highlight">
|
|
||||||
<pre>sudo apt-get install lxc-docker</pre>
|
<pre>sudo apt-get install lxc-docker</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<p><strong>Run!</strong></p>
|
<p><strong>Run!</strong></p>
|
||||||
|
|
||||||
<div class="highlight">
|
<div class="highlight">
|
||||||
<pre>docker</pre>
|
<pre>docker run -i -t ubuntu /bin/bash</pre>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
Continue with the <a href="http://docs.docker.io/en/latest/examples/hello_world/">Hello world</a> example.
|
Continue with the <a href="http://docs.docker.io/en/latest/examples/hello_world/">Hello world</a> example.
|
||||||
|
|
|
@ -44,6 +44,7 @@ new kernel will be compiled and this can take quite a while.
|
||||||
|
|
||||||
yaourt -S lxc-docker-git
|
yaourt -S lxc-docker-git
|
||||||
|
|
||||||
|
|
||||||
Starting Docker
|
Starting Docker
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -56,10 +57,7 @@ There is a systemd service unit created for docker. To start the docker service
|
||||||
|
|
||||||
sudo systemctl start docker
|
sudo systemctl start docker
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> dotcloud/master
|
|
||||||
To start on system boot:
|
To start on system boot:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
|
@ -1,56 +1,53 @@
|
||||||
.. _ubuntu_linux:
|
.. _binaries:
|
||||||
|
|
||||||
Ubuntu Linux
|
Binaries
|
||||||
============
|
========
|
||||||
|
|
||||||
**Please note this project is currently under heavy development. It should not be used in production.**
|
**Please note this project is currently under heavy development. It should not be used in production.**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Installing on Ubuntu 12.04 and 12.10
|
|
||||||
|
|
||||||
Right now, the officially supported distributions are:
|
Right now, the officially supported distributions are:
|
||||||
|
|
||||||
Ubuntu 12.04 (precise LTS)
|
- Ubuntu 12.04 (precise LTS) (64-bit)
|
||||||
Ubuntu 12.10 (quantal)
|
- Ubuntu 12.10 (quantal) (64-bit)
|
||||||
Docker probably works on other distributions featuring a recent kernel, the AUFS patch, and up-to-date lxc. However this has not been tested.
|
|
||||||
|
|
||||||
Install dependencies:
|
Install dependencies:
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
sudo apt-get install lxc wget bsdtar curl
|
sudo apt-get install lxc bsdtar
|
||||||
sudo apt-get install linux-image-extra-`uname -r`
|
sudo apt-get install linux-image-extra-`uname -r`
|
||||||
|
|
||||||
The linux-image-extra package is needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
|
The linux-image-extra package is needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
|
||||||
|
|
||||||
Install the latest docker binary:
|
Install the docker binary:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
wget http://get.docker.io/builds/$(uname -s)/$(uname -m)/docker-master.tgz
|
wget http://get.docker.io/builds/Linux/x86_64/docker-master.tgz
|
||||||
tar -xf docker-master.tgz
|
tar -xf docker-master.tgz
|
||||||
|
sudo cp ./docker-master /usr/local/bin
|
||||||
|
|
||||||
|
Note: docker currently only supports 64-bit Linux hosts.
|
||||||
|
|
||||||
|
|
||||||
|
Run the docker daemon
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo docker -d &
|
||||||
|
|
||||||
|
|
||||||
Run your first container!
|
Run your first container!
|
||||||
|
-------------------------
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
cd docker-master
|
docker run -i -t ubuntu /bin/bash
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo ./docker run -i -t base /bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
To run docker as a daemon, in the background, and allow non-root users to run ``docker`` start
|
|
||||||
docker -d
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo ./docker -d &
|
|
||||||
|
|
||||||
|
|
||||||
Consider adding docker to your PATH for simplicity.
|
|
||||||
|
|
||||||
Continue with the :ref:`hello_world` example.
|
Continue with the :ref:`hello_world` example.
|
|
@ -13,6 +13,7 @@ Contents:
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
ubuntulinux
|
ubuntulinux
|
||||||
|
binaries
|
||||||
archlinux
|
archlinux
|
||||||
vagrant
|
vagrant
|
||||||
windows
|
windows
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
|
|
||||||
Mac OS X and other linux
|
|
||||||
========================
|
|
||||||
|
|
||||||
Please note this is a community contributed installation path. The only 'official' installation is using the :ref:`ubuntu_linux` installation path. This version
|
|
||||||
may be out of date because it depends on some binaries to be updated and published
|
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
We currently rely on some Ubuntu-linux specific packages, this will change in the future, but for now we provide a
|
|
||||||
streamlined path to install Virtualbox with a Ubuntu 12.10 image using Vagrant.
|
|
||||||
|
|
||||||
1. Install virtualbox from https://www.virtualbox.org/ (or use your package manager)
|
|
||||||
2. Install vagrant from http://www.vagrantup.com/ (or use your package manager)
|
|
||||||
3. Install git if you had not installed it before, check if it is installed by running
|
|
||||||
``git`` in a terminal window
|
|
||||||
|
|
||||||
We recommend having at least about 2Gb of free disk space and 2Gb RAM (or more).
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
1. Fetch the docker sources
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
git clone https://github.com/dotcloud/docker.git
|
|
||||||
|
|
||||||
2. Run vagrant from the sources directory
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
vagrant up
|
|
||||||
|
|
||||||
Vagrant will:
|
|
||||||
|
|
||||||
* Download the Quantal64 base ubuntu virtual machine image from get.docker.io/
|
|
||||||
* Boot this image in virtualbox
|
|
||||||
|
|
||||||
Then it will use Puppet to perform an initial setup in this machine:
|
|
||||||
|
|
||||||
* Download & untar the most recent docker binary tarball to vagrant homedir.
|
|
||||||
* Debootstrap to /var/lib/docker/images/ubuntu.
|
|
||||||
* Install & run dockerd as service.
|
|
||||||
* Put docker in /usr/local/bin.
|
|
||||||
* Put latest Go toolchain in /usr/local/go.
|
|
||||||
|
|
||||||
You now have a Ubuntu Virtual Machine running with docker pre-installed.
|
|
||||||
|
|
||||||
To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran
|
|
||||||
``vagrant up``. Vagrant will make sure to connect you to the correct VM.
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
vagrant ssh
|
|
||||||
|
|
||||||
Now you are in the VM, run docker
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
docker
|
|
||||||
|
|
||||||
|
|
||||||
Continue with the :ref:`hello_world` example.
|
|
|
@ -6,17 +6,31 @@ Ubuntu Linux
|
||||||
**Please note this project is currently under heavy development. It should not be used in production.**
|
**Please note this project is currently under heavy development. It should not be used in production.**
|
||||||
|
|
||||||
|
|
||||||
Docker is now available as a Ubuntu PPA (Personal Package Archive),
|
Right now, the officially supported distributions are:
|
||||||
|
|
||||||
|
- Ubuntu 12.04 (precise LTS) (64-bit)
|
||||||
|
- Ubuntu 12.10 (quantal) (64-bit)
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
The linux-image-extra package is only needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt-get install linux-image-extra-`uname -r`
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Docker is available as a Ubuntu PPA (Personal Package Archive),
|
||||||
`hosted on launchpad <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_
|
`hosted on launchpad <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_
|
||||||
which makes installing Docker on Ubuntu very easy.
|
which makes installing Docker on Ubuntu very easy.
|
||||||
|
|
||||||
**The Requirements**
|
|
||||||
|
|
||||||
* Ubuntu 12.04 (LTS) or Ubuntu 12.10
|
|
||||||
* **64-bit Operating system**
|
|
||||||
|
|
||||||
|
|
||||||
Add the custom package sources to your apt sources list. Copy and paste both the following lines at once.
|
Add the custom package sources to your apt sources list. Copy and paste the following lines at once.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
.. _install_using_vagrant:
|
.. _install_using_vagrant:
|
||||||
|
|
||||||
Install using Vagrant
|
Using Vagrant
|
||||||
=====================
|
=============
|
||||||
|
|
||||||
Please note this is a community contributed installation path. The only 'official' installation is using the
|
Please note this is a community contributed installation path. The only 'official' installation is using the
|
||||||
:ref:`ubuntu_linux` installation path. This version may sometimes be out of date.
|
:ref:`ubuntu_linux` installation path. This version may sometimes be out of date.
|
||||||
|
@ -27,25 +27,28 @@ Spin it up
|
||||||
|
|
||||||
1. Fetch the docker sources (this includes the Vagrantfile for machine setup).
|
1. Fetch the docker sources (this includes the Vagrantfile for machine setup).
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
git clone https://github.com/dotcloud/docker.git
|
git clone https://github.com/dotcloud/docker.git
|
||||||
|
|
||||||
2. Run vagrant from the sources directory
|
2. Run vagrant from the sources directory
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
vagrant up
|
vagrant up
|
||||||
|
|
||||||
Vagrant will:
|
Vagrant will:
|
||||||
|
|
||||||
* Download the 'official' Precise64 base ubuntu virtual machine image from vagrantup.com
|
* Download the 'official' Precise64 base ubuntu virtual machine image from vagrantup.com
|
||||||
* Boot this image in virtualbox
|
* Boot this image in virtualbox
|
||||||
* Add the `Docker PPA sources <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_ to /etc/apt/sources.lst
|
* Add the `Docker PPA sources <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_ to /etc/apt/sources.lst
|
||||||
* Update your sources
|
* Update your sources
|
||||||
* Install lxc-docker
|
* Install lxc-docker
|
||||||
|
|
||||||
You now have a Ubuntu Virtual Machine running with docker pre-installed.
|
You now have a Ubuntu Virtual Machine running with docker pre-installed.
|
||||||
|
|
||||||
|
Connect
|
||||||
|
-------
|
||||||
|
|
||||||
To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran
|
To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran
|
||||||
``vagrant up``. Vagrant will connect you to the correct VM.
|
``vagrant up``. Vagrant will connect you to the correct VM.
|
||||||
|
@ -54,10 +57,14 @@ To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as
|
||||||
|
|
||||||
vagrant ssh
|
vagrant ssh
|
||||||
|
|
||||||
|
Run
|
||||||
|
-----
|
||||||
|
|
||||||
Now you are in the VM, run docker
|
Now you are in the VM, run docker
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
docker
|
docker
|
||||||
|
|
||||||
|
|
||||||
Continue with the :ref:`hello_world` example.
|
Continue with the :ref:`hello_world` example.
|
||||||
|
|
11
hack/dockerbuilder/Dockerfile
Normal file
11
hack/dockerbuilder/Dockerfile
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# This will build a container capable of producing an official binary build of docker and
|
||||||
|
# uploading it to S3
|
||||||
|
from ubuntu:12.10
|
||||||
|
run apt-get update
|
||||||
|
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q s3cmd
|
||||||
|
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang
|
||||||
|
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q git
|
||||||
|
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q build-essential
|
||||||
|
copy dockerbuilder /usr/local/bin/dockerbuilder
|
||||||
|
copy s3cfg /.s3cfg
|
||||||
|
# run $img dockerbuilder $REVISION_OR_TAG $S3_ID $S3_KEY
|
29
hack/dockerbuilder/dockerbuilder
Normal file
29
hack/dockerbuilder/dockerbuilder
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -x
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PACKAGE=github.com/dotcloud/docker
|
||||||
|
|
||||||
|
if [ $# -lt 3 ]; then
|
||||||
|
echo "Usage: $0 REVISION AWS_ID AWS_KEY"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export REVISION=$1 AWS_ID=$2 AWS_KEY=$3
|
||||||
|
|
||||||
|
|
||||||
|
export PATH=/usr/local/bin:$PATH
|
||||||
|
|
||||||
|
mkdir -p /go/src/$PACKAGE
|
||||||
|
git clone "https://$PACKAGE" /go/src/$PACKAGE
|
||||||
|
cd /go/src/$PACKAGE
|
||||||
|
git checkout $REVISION
|
||||||
|
|
||||||
|
# FIXME: checkout to specific revision
|
||||||
|
|
||||||
|
BUILDDIR=/tmp/docker-$REVISION
|
||||||
|
mkdir -p $BUILDDIR
|
||||||
|
(cd docker && go get && go build -o $BUILDDIR/docker)
|
||||||
|
|
||||||
|
tar -f /tmp/docker.tgz -C $(dirname $BUILDDIR) -zc $(basename $BUILDDIR)
|
||||||
|
s3cmd -P put /tmp/docker.tgz s3://get.docker.io/builds/$(uname -s)/$(uname -m)/docker-$REVISION.tgz
|
3
hack/dockerbuilder/s3cfg
Normal file
3
hack/dockerbuilder/s3cfg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[default]
|
||||||
|
access_key = $AWS_ID
|
||||||
|
secret_key = $AWS_KEY
|
15
runtime.go
15
runtime.go
|
@ -184,12 +184,6 @@ func (runtime *Runtime) Register(container *Container) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the container is not running or just has been flagged not running
|
|
||||||
// then close the wait lock chan (will be reset upon start)
|
|
||||||
if !container.State.Running {
|
|
||||||
close(container.waitLock)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Even if not running, we init the lock (prevents races in start/stop/kill)
|
// Even if not running, we init the lock (prevents races in start/stop/kill)
|
||||||
container.State.initLock()
|
container.State.initLock()
|
||||||
|
|
||||||
|
@ -207,6 +201,15 @@ func (runtime *Runtime) Register(container *Container) error {
|
||||||
// done
|
// done
|
||||||
runtime.containers.PushBack(container)
|
runtime.containers.PushBack(container)
|
||||||
runtime.idIndex.Add(container.Id)
|
runtime.idIndex.Add(container.Id)
|
||||||
|
|
||||||
|
// If the container is not running or just has been flagged not running
|
||||||
|
// then close the wait lock chan (will be reset upon start)
|
||||||
|
if !container.State.Running {
|
||||||
|
close(container.waitLock)
|
||||||
|
} else {
|
||||||
|
container.allocateNetwork()
|
||||||
|
go container.monitor()
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -273,7 +273,7 @@ func TestAllocatePortLocalhost(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer container.Kill()
|
defer container.Kill()
|
||||||
time.Sleep(300 * time.Millisecond) // Wait for the container to run
|
time.Sleep(600 * time.Millisecond) // Wait for the container to run
|
||||||
conn, err := net.Dial("tcp",
|
conn, err := net.Dial("tcp",
|
||||||
fmt.Sprintf(
|
fmt.Sprintf(
|
||||||
"localhost:%s", container.NetworkSettings.PortMapping["5555"],
|
"localhost:%s", container.NetworkSettings.PortMapping["5555"],
|
||||||
|
|
2
utils.go
2
utils.go
|
@ -442,7 +442,7 @@ func FindCgroupMountpoint(cgroupType string) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
reg := regexp.MustCompile(`^cgroup on (.*) type cgroup \(.*` + cgroupType + `[,\)]`)
|
reg := regexp.MustCompile(`^.* on (.*) type cgroup \(.*` + cgroupType + `[,\)]`)
|
||||||
for _, line := range strings.Split(string(output), "\n") {
|
for _, line := range strings.Split(string(output), "\n") {
|
||||||
r := reg.FindStringSubmatch(line)
|
r := reg.FindStringSubmatch(line)
|
||||||
if len(r) == 2 {
|
if len(r) == 2 {
|
||||||
|
|
Loading…
Reference in a new issue