-
常用命令
拉取镜像
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 $ docker container run -d -p 80:80 --name nginx nginx (-p 80:80 is optional as it runs on 80 by default) $ docker container run -d -p 8080:80 --name apache httpd $ docker container run -d -p 27017:27017 --name mongo mongo $ docker container run -d -p 3306:3306 --name mysql --env MYSQL_ROOT_PASSWORD=123456 mysql
CONTAINER INFO 1 2 3 4 5 6 $ docker container inspect [NAME] $ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' [NAME] $ docker container stats [NAME]
ACCESSING CONTAINERS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ docker container run -it --name [NAME] nginx bash $ winpty docker container run -it --name [NAME] nginx bash $ docker container run -it --name ubuntu ubuntu $ docker container run --rm -it --name [NAME] ubuntu $ docker container start -ai ubuntu $ docker container exec -it mysql bash $ 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 WORKDIR /usr/share/nginx/html COPY index.html index.html
1 2 3 4 5 6 7 $ docker image build -t nginx-website $ docker container run -p 80:80 --rm nginx-website $ 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 Bind Mount -Link container path to host path Check volumes
Cleanup unused volumes
Pull down mysql image to test
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
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
Link 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
You can run in background with
To cleanup