docker basic, commands
批量删除镜像
1
2
| docker rmi $(docker images | grep "name0" | awk '{print $3}')
docker rmi -f $(docker images | grep "name0" | awk '{print $3}')
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| docker restart foo
# 列出所有的容器 ID
docker ps -aq
# 停止所有的容器
docker stop $(docker ps -aq)
# 删除所有的容器
docker image ls
docker rm $(docker ps -aq)
# 删除所有的镜像
docker rmi $(docker images -q)
# 复制文件
docker cp mycontainer:/opt/file.txt /opt/local/
docker cp /opt/local/file.txt mycontainer:/opt/
|
docker port
docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。
docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
docker pod log
1
2
3
| /var/log/containers/
/var/log/pods/<container id>/container-0
/var/lib/docker/containers/<container id>
|
install
https://blog.wiloon.com/docker/install
image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 列出本机的所有 image 文件
docker image ls
#显示包括中间层镜像在内的所有镜像
docker image ls -a
# 显示虚悬镜像(dangling image)
docker image ls -f dangling=true
docker image ls --digests
# 删除 image
docker image rm [image id]
# 删除未使用的映像
docker image prune
docker rmi f8ab12e03d53
Error response from daemon: conflict: unable to delete f8ab12e03d53 (must be forced) - image is referenced in multiple repositories
docker rmi 192.168.0.1/you/tom:1.0.8
|
archlinux install docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| sudo pacman -S docker
systemctl start docker.service
docker run -it --rm archlinux bash -c "echo hello world"
pacman -S docker-compose
docker ps -s
# docker
docker run \
-d \
--name redis \
-p 6379:6379 \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
redis
|
network
1
2
| docker network ls
docker network inspect 网络ID
|
volume
1
2
3
4
5
6
7
| docker volume ls
docker volume create --name influxdb-config
docker volume rm influxdb-config
# 删除实例同时删除 volume
docker rm -v instance0
# 清理 无主 (dangling) 的数据卷
docker volume prune
|
容器创建后不能再新增 volume, 可以先commit到镜像, 再创建新的容器。
时区问题
1
| -v /etc/localtime:/etc/localtime:ro
|
查看 docker 容器使用的资源, cpu, 内存, IO
https://www.cnblogs.com/sparkdev/p/7821376.html
logs
1
| docker logs --since 10s -f influxdb
|
1
2
3
| docker inspect xxx
docker container update --restart=no <containername>
docker container update --restart=always <containername>
|
docker build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 构建镜像
# docker build [选项] <上下文路径/URL/->
# --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
# --add-host=foo.wiloon.com:192.168.xx.xxx # /etc/hosts
docker build -t dnsmasq:v1.0.0 .
docker tag dnsmasq:v1.0.0 swr.cn-south-1.myhuaweicloud.com/{组织名称}/dnsmasq:v1.0.0
docker push swr.cn-south-1.myhuaweicloud.com/{组织名称}/dnsmasq:v1.0.0
docker pull swr.cn-south-1.myhuaweicloud.com/{组织名称}/dnsmasq:v1.0.0
# 从 Git repo 中构建
docker build https://github.com/twang2218/gitlab-ce-zh.git#:11.1
# -f 指定Dockerfile路径
docker build -f /path/to/Dockerfile .
|
docker run
创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
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
| docker run -it --rm ubuntu bash
docker run -d id0 sleep 6000
# sleep 6000, 6000 秒(100分钟/1小时40分)之后 关闭
# -i, --interactive=false 打开 STDIN, 用于控制台交互
# -t, --tty=false 分配 tty 设备, 该可以支持终端登录, 默认为 false
# -t -a stdout Outputs the container logs on the standard output
# -P, --publish-all=false Docker自动分配一个未被使用的端口
# -v, --volume=[] Bind mount a volume(挂载目录 -v /root:/opt/temp), 跟mount一样,path 里如果有文件的话,挂载之后是看不到的。
# -d, --detach=false Run container in background and print container ID(后台运行)并返回容器ID;
# --rm 容器退出后随之将其删除
# bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
# --name="nginx-lb" : 为容器指定一个名称;
# -p 80:80 映射端口, hostPort:containerPort
# --privileged=true, 大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。
# --restart=always
# --cap-add=SYS_TIME
# -e, --env=[] Set environment variables(设置环境变量)
# --link 用来链接2个容器,使得源容器 (被链接的容器) 和接收容器 (主动去链接的容器) 之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。--link <name or id>:alias 其中,name和id是源容器的name和id,alias是源容器在link下的别名。 建议使用 docker network 而不是 --link
# --cpus=2
# --cpuset-cpus="0" --cpu-shares=512
docker run \
-d \
--name name0 \
-p 2000:80/tcp \
-v /etc/localtime:/etc/localtime:ro \
--cpus 1 \
-m 1024m \
--restart=always \
image0_name
|
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
63
| # 进入容器
docker exec -it webserver bash
docker exec -it --user=root foo bash
#查看存储层变化
docker diff webserver
# 将容器保存为镜像
sudo docker commit webserver nginx:v2
sudo docker commit \
--author "wiloon" \
--message "modify index" \
webserver \
nginx:v2
# 查看镜像内的历史记录
docker history nginx:v2
docker volume ls
docker volume rm
sudo pacman -S docker # install docker
sudo systemctl start docker.service
sudo pacman -S docker-compose
# search image
sudo docker search [image name]
# 查看docker 版本
docker --version #查看版本
docker-compose --version #查看版本
docker-machine --version #查看版本
docker version #查看client和server端版本,并可以查看是否开启体验功能
sudo docker-compose up
docker ps # 列出容器
docker stop container_id # 停止容器
docker rm container_id # 删除容器
# network
docker network ls
# start dokcer
systemctl start docker
docker pull centos
docker image pull library/hello-world
docker container run hello-world
docker container kill [containID]
# start daemon manually
dockerd
docker images
docker search seanlo
docker container ls
docker container logs 244d1663f0b7 -f
docker container stop
docker container rm
docker container prune
docker run -dit -p 5000:5000 ubuntu
docker network create -d bridge my-net
|
macvlan, –net, –ip
1
2
3
4
5
6
7
8
9
| docker run \
--name memcache \
-d \
--net net0 \
--ip 192.168.1.xxx \
-p 11211:11211 \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
memcached -m 16
|
default volumn path /var/lib/docker/volumes/
https://segmentfault.com/a/1190000012063374
https://www.cnblogs.com/sparkdev/p/8052522.html
https://colobu.com/2018/05/15/Stop-and-remove-all-docker-containers-and-images/
https://cizixs.com/2017/08/04/docker-resources-limit/
docker 日志
https://kevinguo.me/2017/07/06/Docker-configuring-logging-drivers/
docker 跨平台镜像
https://cloud.tencent.com/developer/article/1543689