Start up docker container without dockerfile - docker

I've been using Dockerfiles so often that I've forgotten how to start up a new one without one.
I was reading https://docs.docker.com/engine/reference/commandline/start/ and ofc it doesn't state how to start up a new one.

docker run -it ubuntu:16.04 bash

A Dockerfile describes a Docker image not a container.
The container is an instance of this image.
If you want to run a container without building an image (which means without creating a Dockerfile), you need to use an existing image on the Docker Hub (link here).
N.B.: The Docker Hub is a Docker online repository, they are more repositories like Quay, Rancher and others.
For example, if you want to test this, you can use the hello-world image found on the Docker Hub: https://hub.docker.com/_/hello-world/.
According to the documentation, to run a simple hello-world container:
$ docker run hello-world
Source: https://hub.docker.com/_/hello-world/
If you don't have the image locally, Docker will automatically pull it
from the web. If you want to manually pull the image you can run the
following command:
$ docker pull hello-world
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Source: https://hub.docker.com/_/hello-world/

docker start is used to start a stopped container which already exists and in stopped state.
If you want to start a new container use docker run instead. For information about docker run please see https://docs.docker.com/engine/reference/commandline/run/

Related

Trouble with starting a Docker container

Last night I pushed a basic image of CentOS to Docker Hub and I'm trying to get it to work by pulling it from Docker Hub (my repository page). Specifically, I'm trying to get "secondCommit" and I ran the image so I have it in my containers. I'm running the container with docker start <container ID> and it just shows the container ID in the command prompt but doesn't start it.
Run the image using the following command -
docker run -ti <image_name>:<tag>

How to run a docker container that has docker running inside it?

I'm building an app that makes api calls to run code inside docker containers
I want to run a docker container that has docker running inside it.
I want to create a docker file that pulls other docker images inside it and then waits for api calls (on port 2376) to create, run and delete containers based on the docker images that i pulled into the dockerfile
This is the dockerfile I'm trying to create right now.
FROM docker:stable
RUN docker pull python
EXPOSE 23788
CMD tail -f /dev/null
However when the RUN command is issued i get this error message:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
I don't really know how to start docker inside a docker container.
The reason i need this kind of a docker file is so that i can then use kubernetes to scale this part of my application
There's a special image for this, docker:dind. See the bit about "Docker in Docker" in https://hub.docker.com/_/docker.

How to push docker images with the associated containers

I have a docker container in a virtual machines where I am hosting my Postgres database, but when I pull that image to my local machine the container does not show up. I have tried import/export and save/load but still I can't get the container to show in my local machine. Any help will be much appreciated!
You have to build containers after pulling in the images.
The simplest way is
docker create --name my_container bf141206f773
where bf141206f773 is the image's hash. You can also use its full_name:tag.
To start your new container:
docker start my_container
To enter your new container:
docker exec -it my_container /bin/bash
If you want to see how I do this in a deployment-environment, check out my Laravel QuickStart project's docker files: https://github.com/phpexpertsinc/laravel_quickstart

How to run docker image as singleton

I'm new to docker.
I have an image that I want to run, but I want docker to see if that image is already running from another terminal...if it is running I don't want it to load another one...
is this something that can be done with docker?
if it helps, I'm running the docker with a privileged mode.
I've tried to search for singleton docker or something like that, but no luck.
updates-
1.working from ubuntu.
My scenario- from terminal X I run docker run Image_a
from terminal Y I run docker run Image_a
when trying to run from terminal Y, I want docker to check if there is already a docker running with Image_a, and the answer is true - I want docker not to run in terminal Y
You can use the following docker command to get all containers that running from specific image:
docker ps --filter ancestor="imagename:tag"
Example:
docker ps --filter ancestor="drone/drone:0.5"
Example Output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fb00087d4c1 drone/drone:0.5 "/drone agent" 6 days ago Up 26 minutes 8000/tcp drone_drone-agent_1
This approach uses docker api and docker daemon, so it doesnt matter if the run command executed in background or other terminal.
Aother approach:
If you have a single container form a single image:
Try naming your containers, You cant have 2 containers with the same name:
docker run --name uniquecontainer Image_a
Next time you run the above command you will get an error. Btw consider using -d so you dont have to switch terminals.
docker run -d --name uniquecontainer Image_a

docker deploy vs docker stack deploy

According to the docs they are two same commands:
docker stack deploy and docker deploy.
Is that the case or some information is hidden somewhere?
The commands are synonyms, they hit the same backend API. Docker is in the first steps of transitioning from from docker $verb commands to docker $noun $verb, so you'll also see commands like docker images from before and docker image ls, or even docker ps and now docker container ps.

Resources