docker cheat sheet

-


常用命令

拉取镜像 docker pull [IMAGE]
查看所有镜像 docker images
删除镜像 docker image rm [IMAGE]
删除所有镜像 docker rmi $(docker images -aq)

Docker Commands, Help & Tips

Show commands & management commands docker
Docker version info docker version
Show info like number of containers, etc docker info

WORKING WITH CONTAINERS

Create an run a container in foreground docker container run -it -p 80:80 nginx
Create an run a container in background docker container run -d -p 80:80 nginx
Naming Containers docker container run -d -p 80:80 --name nginx-server nginx
List running containers docker container ls or docker ps
List all containers (Even if not running) docker container ls -a
Stop container docker container stop [ID]
Stop all running containers docker stop $(docker ps -aq)
Remove container (Can not remove running containers, must stop first) docker container rm [ID]
To remove a running container use force(-f) docker container rm -f [ID]
Remove multiple containers docker container rm [ID] [ID] [ID]
Remove all containers docker rm $(docker ps -aq)
Get logs (Use name or ID) docker container logs [NAME]
List processes running in container docker container top [NAME]

IMAGE COMMANDS

List the images we have pulled docker image ls
We can also just pull down images docker pull [IMAGE]
Remove image docker image rm [IMAGE]
Remove all images docker rmi $(docker images -a -q)

Some sample container creation

1
2
3
4
5
6
7
8
# NGINX
$ docker container run -d -p 80:80 --name nginx nginx (-p 80:80 is optional as it runs on 80 by default)
# APACHE
$ docker container run -d -p 8080:80 --name apache httpd
# MONGODB
$ docker container run -d -p 27017:27017 --name mongo mongo
# MYSQL
$ docker container run -d -p 3306:3306 --name mysql --env MYSQL_ROOT_PASSWORD=123456 mysql

CONTAINER INFO

1
2
3
4
5
6
# View info on container
$ docker container inspect [NAME]
# Specific property (--format)
$ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' [NAME]
# Performance stats (cpu, mem, network, disk, etc)
$ docker container stats [NAME]

ACCESSING CONTAINERS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Create new nginx container and bash into
$ docker container run -it --name [NAME] nginx bash
# For Git Bash, use "winpty"
$ winpty docker container run -it --name [NAME] nginx bash
# Run/Create Ubuntu container (no bash because ubuntu uses bash by default)
$ docker container run -it --name ubuntu ubuntu
# You can also make it so when you exit the container does not stay by using the -rm flag
$ docker container run --rm -it --name [NAME] ubuntu
# Access an already created container, start with -ai
$ docker container start -ai ubuntu
# Use exec to edit config, etc
$ docker container exec -it mysql bash
# Alpine is a very small Linux distro good for docker (use sh because it does not include bash) (alpine uses apk for its package manager - can install bash if you want)
$ docker container run -it alpine sh
  • i = interactive Keep STDIN open if not attached
  • t = tty - Open prompt

Limiting The Memory Usage For Containers

In order to limit the amount of memory a docker container process can use, simply set the -m [memory amount] flag with the limit.

To run a container with memory limited to 256 MBs:

Example: docker run -name [name] -m [Memory (int)][memory unit (b, k, m or g)] -d (to run not to attach) -p (to set access and expose ports) [image ID]

  • docker run -m 64m -d -p 8082:80 tutum/wordpress

NETWORKING

“bridge” or “docker0” is the default network

Get port docker container port [NAME]
List networks docker network ls
Inspect network docker network inspect [NETWORK_NAME]
Create network (“bridge” is default) docker network create [NETWORK_NAME] or docker network create –driver bridge [NETWORK_NAME]
Link to container, add to network docker run -d –net=[NETWORK_NAME] –name mongodb mongo
Create container on network docker container run -d –name [NAME] –network [NETWORK_NAME] nginx
Connect existing container to network docker network connect [NETWORK_NAME] [CONTAINER_NAME]
Disconnect container from network docker network disconnect [NETWORK_NAME] [CONTAINER_NAME]
Detach network from container docker network disconnect
Delete/Remove network docker network rm [NETWORK_NAME] [NETWORK_NAME]

IMAGE TAGGING & PUSHING TO DOCKERHUB

tags are labels that point ot an image ID docker image ls
Retag existing image docker image tag nginx btraversy/nginx
Upload to dockerhub docker image push bradtraversy/nginx
If denied, do docker login
Add tag to new image docker image tag bradtraversy/nginx bradtraversy/nginx:testing

DOCKERFILE PARTS

FROM The os used. Common is alpine, debian, ubuntu
ENV Environment variables
WORKD Sets working directory (also could use ‘RUN cd /some/path’)IR
COPY Copies files from host to container
RUN Run commands/shell scripts, etc
EXPOS Ports to exposeE
CMD Final command run when you launch a new container from image

demo

1
2
3
FROM nginx:latest # Extends nginx so everything included in that image is included here
WORKDIR /usr/share/nginx/html
COPY index.html index.html
1
2
3
4
5
6
7
# Build image from Dockerfile
$ docker image build -t nginx-website
# Running it
$ docker container run -p 80:80 --rm nginx-website
# Tag and push to Dockerhub
$ docker image tag nginx-website:latest btraversy/nginx-website:latest
$ docker image push bradtraversy/nginx-website

VOLUMES

Volume - Makes special location outside of container UFS. Used for databases

Check volumes

1
2

\$ docker volume ls

Cleanup unused volumes

1
2

\$ docker volume prune

Pull down mysql image to test

1
2

\$ docker pull mysql

Inspect and see volume

1
2

\$ docker image inspect mysql

Run container

1
2

\$ docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True mysql

Inspect and see volume in container

1
2

\$ docker container inspect mysql

TIP: Mounts

  • You will also see the volume under mounts
  • Container gets its own uniqe location on the host to store that data
  • Source: xxx is where it lives on the host

Check volumes

1
2

\$ docker volume ls

There is no way to tell volumes apart for instance with 2 mysql containers, so we used named volumes

Named volumes (Add -v command)(the name here is mysql-db which could be anything)

1
2

\$ docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql

Inspect new named volume

1
docker volume inspect mysql-db

BIND MOUNTS

  • Can not use in Dockerfile, specified at run time (uses -v as well)
  • … run -v /Users/brad/stuff:/path/container (mac/linux)
  • … run -v //c/Users/brad/stuff:/path/container (windows)

TIP: Instead of typing out local path, for working directory use $(pwd):/path/container - On windows may not work unless you are in your users folder

Run and be able to edit index.html file (local dir should have the Dockerfile and the index.html)

1
$ docker container run  -p 80:80 -v $(pwd):/usr/share/nginx/html nginx

Go into the container and check

1
2
3
$ docker container exec -it nginx bash
$ cd /usr/share/nginx/html
$ ls -al

You could create a file in the container and it will exiost on the host as well

1
$ touch test.txt
1
$ docker run -d --name my-postgres postgres

now Link it with dot net

1
$ docker run -d -p 5000:5000 --link my-postgres:postgres btree/dotnet

DOCKER COMPOSE

  • Configure relationships between containers
  • Save our docker container run settings in easy to read file
  • 2 Parts: YAML File (docker.compose.yml) + CLI tool (docker-compose)

1. docker.compose.yml - Describes solutions for

  • containers
  • networks
  • volumes

2. docker-compose CLI - used for local dev/test automation with YAML files

Sample compose file (From Bret Fishers course)

1
2
3
4
5
6
7
8
9
10
11
12
version: '2'

# same as
# docker run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve

services:
jekyll:
image: bretfisher/jekyll-serve
volumes:
- .:/site
ports:
- '80:4000'

Example 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'
services:
app:
container_name: docker-node-mongo
restart: always
build: .
ports:
- '80:3000'
links:
- mongo
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'

To run

1
docker-compose up

You can run in background with

1
docker-compose up -d

To cleanup

1
docker-compose down

this has been taken from


  docker
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×