Let's start off by installing Docker on our Mac. Visit the docker site to download the Mac application.
Then we will need to create a directory in which to start building our image.
cd ~ && mkdir first-docker-image
After creating your directory, let's create an image in which we can create our own container. We will first start off by creating a Dockerfile which will hold our image and its dependencies.
cd first-docker-image && touch Dockerfile
Once created, vim into our file and paste the code you need for your container. For me, I will do the one I run ruby code in.
FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /run-tests
RUN gem install rspec
Here are some additional commands you can have.
# COPY Gemfile /myapp/Gemfile
# COPY Gemfile.lock /myapp/Gemfile.lock
# RUN bundle install
# COPY . /myapp
After that is done, we then need to build our image so that we can use it and generate a container to install our stuff in.
docker build -t rubyrspectests .
You will see after running this command that it will install all of the dependencies you specified you needed, and then we will run it later in a UNIX container provided by Docker.
To run our container we can simply use the following command.
docker run -it rubyspectests
But for my case, I need to run it in a certain directory and then make it read only so that no malicious code can be run.
docker run -it -v `pwd`:/run-tests:ro rubyrspec rspec rspect_spec.rb
# You can also run it using bash to have a command line within your container.
docker run -it -v `pwd`:/run-tests:ro rubyrspec bash
# The -w specifies a working directory, a little redundant, but good for debugging
docker run -it -v `pwd`:`pwd` -w `pwd` rubyrspec bash
# Running the image on the ubuntu server
sudo docker run -v /path/to/testing/files:/run-tests:ro username/rubyrspec rspec rspect_spec.rb
# Run specific folder within Docker image
docker run -tiv /path/to/desired/dir:/root/destination_folder image:tag
So in order to run it in the path I need to and make the files accessible to the container, I have to specify a volume I need to be available.
To tag, pull, and push your image to the Docker Cloud, simply login and use the following commands in your terminal. Docker will always check locally first and if it finds nothing, it will check remotely.
docker login
docker tag my_image username/my_image
docker push username/my_image
docker pull username/my_image
To build from an existing image, use the following code below.
docker build -t username/name:tag .
docker push username/name:tag
Let's update our packages before proceeding.
sudo apt-get update
Now let’s install the docker-io package:
sudo apt-get -y install docker.io
Now we need to link and fix paths.
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
Optional, to configure Docker to start when the server boots.
sudo update-rc.d docker.io defaults
sudo docker login
sudo docker pull username/repo
Docker will run the following command in a new container, -i attaches stdin and stdout, -t allocates a tty, and we’re using our own repo.
sudo docker run -it username/repo
If you need to search for a bunch of containers that are already pre-made, you can do the following.
sudo docker search any_package
You can also run a few of these commands to see extra details.
# This will show you containers currently running
docker ps
# This will show a history of run containers
docker ps -a
# Force destroy a container
docker rm -f XXXXX