Docker常用命令
文章目录
Docker 基础
List Docker CLI commands
1 2 |
docker docker container --help |
Display Docker version and info
1 2 3 |
docker --version docker version docker info |
Execute Docker image
1
|
docker run hello-world |
Image
List Docker images
1
|
docker image ls |
Save and load image
Save
1
|
docker save -o dockerName.tar username/repository:tag |
示例:
1 2 |
# save docker save -o quay.io-calico-node-1.tar quay.io/calico/node:v1.0 |
Load
docker load -i dockerName.tar
1 2 |
# load docker load -i quay.io-calico-node-1.tar |
Export and import image
Export
docker export CONTAINER ID
> imageName.tar
1
|
docker export 7691a814370e > ubuntu.tar |
Import
本地导入
1
cat imageName.tar | docker import - username/repository:tag
示例:
|
|
URL 导入
1
docker import http://example.com/exampleimage.tgz example/imagerepo
delete image
1
|
docker rmi <iamge> |
Container
List Docker containers
running, all, all in quiet mode
1 2 3 |
docker container ls docker container ls --all docker container ls -aq |
Build the app
创建docker 镜像,-t
关联标签
1
|
docker build -t friendlyhello . |
Run the app
-p
映射宿主机4000端口到容器80端口
-d
表示以守护方式打开(即非交互模式,后台运行)
-i
表示让容器的标准输入保持打开
-t
表示让Docker分配一个伪终端并绑定到容器的标准输入上
1 2 |
docker run -p 4000:80 friendlyhello docker run -d -p 4000:80 friendlyhello |
停止容器
1
|
docker container stop `CONTAINER ID` |
Share your image
登录docker hub
1
|
docker login |
Tag the iamge
1 2 |
docker tag image username/repository:tag docker tag friendlyhello binbean/get-started:0.1 |
publish the image
1 2 |
docker push username/repository:tag docker push binbean/get-started:0.1 |
命令总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
docker build -t friendlyhello . # Create image using this directory's Dockerfile docker run -p 4000:80 friendlyhello # Run "friendlyhello" mapping port 4000 to 80 docker run -d -p 4000:80 friendlyhello # Same thing, but in detached mode docker container ls # List all running containers docker container ls -a # List all containers, even those not running docker container stop <hash> # Gracefully stop the specified container docker container kill <hash> # Force shutdown of the specified container docker container rm <hash> # Remove specified container from this machine docker container rm $(docker container ls -a -q) # Remove all containers docker image ls -a # List all images on this machine docker image rm <image id> # Remove specified image from this machine docker image rm $(docker image ls -a -q) # Remove all images from this machine docker login # Log in this CLI session using your Docker credentials docker tag <image> username/repository:tag # Tag <image> for upload to registry docker push username/repository:tag # Upload tagged image to registry docker run username/repository:tag # Run image from a registry |
Service
Run app with load-balanced
1 2 |
docker swarm init docker stack deploy -c docker-compose.yml getstartedlab |
查看服务
1
|
docker service ls |
Take down the app and the swarm
Take the app down with
docker stack rm
1
docker stack rm getstartedlab
Take down the swarm
1
docker swarm leave --force
Swarm
配置swarm
run docker swarm init
to enable swarm mode and make your current machine a swarm manager, then run docker swarm join
on other machines to have them join the swarm as workers.
创建一个集群
需要先安装
virtualbox
1 2
docker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox myvm2
查看以创建的节点
1
docker-machine ls
创建swarm管理节点
1 2 3
# 设置myvm1为管理节点 docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>"
加入worker 节点
1 2 3 4 5
# 把myvm2加入worker节点 docker-machine ssh myvm2 "docker swarm join \ --token <token> \ <ip>:2377"
1 2 3
# 在管理节点上查看swarm节点情况 docker-machine ssh myvm1 "docker node ls"
上传docker-compost.yml文件到管理节点
1
docker-machine scp docker-compose.yml myvm1:~
部署应用
1
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlap"
查看应用运行情况
1 2
docker-machine ssh myvm1 "docker stack ps getstartedlap" docker-machine ssh myvm1 "docker stack services getstartedlap"
访问应用
可使用任意节点的IP地址访问应用,例如:http://192.168.99.101
关于docker-machine env
and docker-machine ssh
docker-machine ssh
通过ssh与节点进行交互,命令包含在”“中,使用节点文件系统
1
|
docker-machine ssh <machine> "<command>" |
docker-machine env
通过本地shell与远程节点交互,使用本机文件系统
1
|
docker-machine env <machine> |
1) Mac or Linux
1
|
eval $(docker-machine env <machine>) |
2) Windows
1
|
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression |
断开与远程节点链接,切换回本的shell
1) Mac or Linux
1
|
eval $(docker-machine env -u) |
2) Windows
1
|
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env -u | Invoke-Expression |
命令总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# Create a VM (Mac, Win7, Linux) docker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso myvm2 # Win10 docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # View basic information about your node docker-machine env myvm1 # List the nodes in your swarm docker-machine ssh myvm1 "docker node ls" # Inspect a node docker-machine ssh myvm1 "docker node inspect <node ID>" # View join token docker-machine ssh myvm1 "docker swarm join-token -q worker" # Open an SSH session with the VM; type "exit" to end docker-machine ssh myvm1 # View nodes in swarm (while logged on to manager) docker node ls # Make the worker leave the swarm docker-machine ssh myvm2 "docker swarm leave" # Make master leave, kill swarm docker-machine ssh myvm1 "docker swarm leave -f" # list VMs, asterisk shows which VM this shell is talking to docker-machine ls # Start a VM that is currently not running docker-machine start myvm1 # show environment variables and command for myvm1 docker-machine env myvm1 # Mac command to connect shell to myvm1 eval $(docker-machine env myvm1) # Windows command to connect shell to myvm1 & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file docker stack deploy -c <file> <app> # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app) docker-machine scp docker-compose.yml myvm1:~ # Deploy an app using ssh (you must have first copied the Compose file to myvm1) docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Disconnect shell from VMs, use native docker eval $(docker-machine env -u) # Stop all running VMs docker-machine stop $(docker-machine ls -q) # Delete all VMs and their disk images docker-machine rm $(docker-machine ls -q) # List stacks or apps docker stack ls # Run the specified Compose file docker stack deploy -c <composefile> <appname> # List running services associated with an app docker service ls # List tasks associated with an app docker service ps <service> # Inspect task or container docker inspect <task or container> # List container IDs docker container ls -q # Tear down an application docker stack rm <appname> # Take down a single node swarm from the manager docker swarm leave --force |
文章作者 binbin wen
上次更新 2019-06-02