Docker快速手册

2020-03-23  本文已影响0人  马蹄哒

Docker命令小结

查看命令提示

$ docker

查看docker版本

$ docker version

查看详情,如容器数量等

$ docker info

使用容器

创建容器在前台运行:

Create an run a container in foreground
-it : --interactive --tty
host_port:container_port

$ docker container run -it -p 80:80 nginx

创建容器在后台运行: -d

Create an run a container in background

$ docker container run -d -p 80:80 nginx

容器命名

$ docker container run -d -p 80:80 --name nginx-server nginx

TIP: WHAT RUN DID

查看正在运行的容器

$ docker container ls

OR

$ docker ps

查看所有容器 (即使不是运行状态)

$ docker container ls -a

停止运行容器

$ docker container stop [ID]

停止所有运行中的容器

$ docker stop $(docker ps -aq)

删除一个容器 (不能删除正在运行的容器,必须先停止容器运行)

$ docker container rm [ID]

强制删除运行中的容器 (-f)

$ docker container rm -f [ID]

删除多个容器

$ docker container rm [ID] [ID] [ID]

删除所有容器

$ docker rm $(docker ps -aq)

获取日志 (使用容器名称或ID)

$ docker container logs [NAME]

查看容器内运行的进程

$ docker container top [NAME]

TIP: 关于容器

Docker containers are often compared to virtual machines but they are actually just processes running on your host os. In Windows/Mac, Docker runs in a mini-VM so to see the processes youll need to connect directly to that. On Linux however you can run "ps aux" and see the processes directly

镜像命令

查看所有拉取的镜像

$ docker image ls

拉取镜像

$ docker pull [IMAGE]

删除镜像

$ docker image rm [IMAGE]

删除所有镜像

$ docker rmi $(docker images -a -q)

TIP: ABOUT IMAGES

容器创建示例

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

容器信息

查看容器信息

$ docker container inspect [NAME]

查看指定特性 (--format)

$ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' [NAME]

查看性能状态 (cpu, mem, network, disk, etc)

$ docker container stats [NAME]

访问容器

创建nginx容器并进入bash窗口访问

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

创建并运行Ubuntu

$ docker container run -it --name ubuntu ubuntu

(no bash because ubuntu uses bash by default)

退出是自动停止容器(-rm)

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

启用已经存在的容器(start -ai)

Access an already created container, start with -ai

$ docker container start -ai ubuntu

使用exec修改配置

Use exec to edit config, etc

$ docker container exec -it mysql bash

Alpine是适合docker的小巧的linux发行版本

Alpine is a very small Linux distro good for docker

$ docker container run -it alpine sh

(use sh because it does not include bash)
(alpine uses apk for its package manager - can install bash if you want)

网络

"bridge" or "docker0" is the default network

查看端口

$ docker container port [NAME]

查看网络

List networks

$ docker network ls

检查网络

$ docker network inspect [NETWORK_NAME]
("bridge" is default)

创建网络

$ docker network create [NETWORK_NAME]

创建容器并指定网络

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

镜像打标签 & 推送DockerHub

IMAGE TAGGING & PUSHING TO DOCKERHUB

tags are labels that point to an image ID

$ docker image ls

Youll see that each image has a tag

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

Build image from dockerfile (reponame can be whatever)

From the same directory as Dockerfile

$ docker image build -t [REPONAME] .

TIP: CACHE & ORDER

EXTENDING DOCKERFILE

Custom Dockerfile for html paqge with nginx

FROM nginx:latest # Extends nginx so everything included in that image is included here
WORKDIR /usr/share/nginx/html
COPY index.html index.html

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

Bind Mount -Link container path to host path

Check volumes

$ docker volume ls

Cleanup unused volumes

$ docker volume prune

Pull down mysql image to test

$ docker pull mysql

Inspect and see volume

$ docker image inspect mysql

Run container

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

Inspect and see volume in container

$ docker container inspect mysql

TIP: Mounts

Check volumes

$ 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)

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

Inspect new named volume

docker volume inspect mysql-db

BIND MOUNTS

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)

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

Go into the container and check

$ 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

$ touch test.txt

DOCKER COMPOSE

1. docker.compose.yml - Describes solutions for

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

Sample compose file (From Bret Fishers course)

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'

To run

docker-compose up

You can run in background with

docker-compose up -d

To cleanup

docker-compose down

复制容器内到文件到本地

docker cp $(docker inspect -f '{{.Id}}' 容器名):容器路径 本地路径

参考:
docker-help

上一篇 下一篇

猜你喜欢

热点阅读