docker 镜像和container
-
查看已有的docker镜像
docker images -
查看镜像列表
docker search nginx -
启动一个容器
– 基于hello-world镜像启动一个容器,如果本地没有镜像会从公网拉取过来,这次做为测试用
docker run hello-world
docker run --name=con_name images
–name #设置容器名 -
导出镜像
docker save -o image_name.tar image_name -
创建一个容器的同时进入这个容器
docker run -it --name=con_name images
-it #在启动之后进入这个容器 -
创建一个容器,放入后台运行,把物理机80端口映射到容器的80端口
docker run -d -p 81:80 image_name
#-p 参数说明
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort:udp -
查看正在运行的容器
docker ps -
查看所有的容器
-
docker attach con_name
退出容器
–方法一
exit
–方法二
ctrl+p && ctrl+q (一起按,注意顺序,退出后容器依然保持启动状态)
删除容器 -
docker rm con_name
#强制删除需要加-f,不加-f不能删除正在运行中的容器,非常危险,最好不用 -
查看docker网络
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3f91f2097286 bridge bridge local
d7675dbd247c docker_gwbridge bridge local
5b36c7e947fd host host local
ims6qkpikafu ingress overlay swarm
85ba10e7ef79 none null local
创建一个docker网络my-docker -
docker network create -d bridge
–subnet=192.168.0.0/24
–gateway=192.168.0.100
–ip-range=192.168.0.0/24
my-docker -
利用刚才创建的网络启动一个容器
docker run --network=my-docker --ip=192.168.0.5 -itd --name=con_name -h lb01 image_name
–network #指定容器网络
–ip #设定容器ip地址
-h #给容器设置主机名 -
查看容器pid
– 方法一:
docker top con_name
– 方法二:
docker inspect --format “{{.State.Pid}}” con_name -
docker save and load
保存镜像
命令
docker save [options] images [images…]
示例
docker save -o mynetcore.tar mynetcore:v1
或
docker save > mynetcore.tar mynetcore:v1
其中-o和>表示输出到文件,mynetcore.tar为目标文件,mynetcore:v1是源镜像名(name:tag)
传递
保存下来得镜像文件需要将jar文件进行服务器的传递,在网上搜索了好多种,像rcp、scp、ftp、rsync等等吧,尝试过后觉得还是rsync比较好。
示例
rsync -av --progress mynetcore.tar root@49.233.9.236:~/
我只需要从一台服务器推送文件到另一台服务器,他还可以实现拉取,文件同步等等功能,自己去了解吧。
加载镜像
命令
docker load [options]
示例
docker load -i mynetcore.tar
或
docker load < mynetcore.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息 -
停止容器运行
docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名 -
docker kill
docker kill 容器ID或容器名 :直接关闭容器
由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器
想更进一步了解处理机制的可以看下面这篇文章,比较详细但是需要其他方面的
https://www.jb51.net/article/96617.htm -
重启一个容器
docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器
首先 docker ps 查看正在运行的容器信息,显示2分钟前启动运行
docker restart 59ec 重启容器
再次 docker ps 查看容器信息 显示 2秒前启动运行
docker restart 参数
-t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
Docker common comands
docker 仓库
- 登录
docker login --username=13823218155 registry.cn-hangzhou.aliyuncs.com - 推送
docker push registry.cn-hangzhou.aliyuncs.com/lele123/hello
- docker push lilelr/hadoop2.7-v1
-
打tag
docker tag mirrorgcrio/pause-arm64:3.0 k8s.gcr.io/pause-arm64:3.0
docker tag lele/lele_hadoopv1 lilelr/lele_hadoop2.7:1.0
docker tag img-dnn-v1 lilelr/img-dnn-v1:1.0 -
pull 拉取
docker pull xiaoxu780/kube-cross:v1.11.2-1
docker pull mirrorgcrio/pause-arm64:3.0
docker pull mirrorgcrio/pause-arm64:3.2
- 查看镜像大小
docker history node-vanilla
1. systemctl 方式
守护进程重启
sudo systemctl daemon-reload
重启docker服务
sudo systemctl restart docker
关闭docker
sudo systemctl stop docker
2. service 方式
重启docker服务
sudo service docker restart
关闭docker
sudo service docker stop
3. 控制命令
-
docker 制作自己的image
-
docker commit -m ‘镜像描述’ -a ‘制作者’ 容器名 镜像名
-
docker commit -m ‘img-dnn tailbench’ -a ‘lele’ nifty_snyder img-dnn-v1
-
docker commit -m ‘masstree-v1 tailbench’ -a ‘lele’ funny_neumann masstree-v1
-
docker commit -m ‘specjbb-v1 tailbench’ -a ‘lele’ distracted_galois specjbb-v1
-
docker commit -m ‘hadoop2.7-hibench-v1’ -a ‘lele’ a53dabf070a2 hadoop2.7-hibench-v1
-
运行容器
-
docker run silo-v3 sh -c “cd /silo && ./run.sh”
-
docker run -it silo
-
docker run -it masstree-v1
-
docker run --hostname slave4 -it hadoop2.7-v1
-
docker run --hostname p09 -it hadoop2.7-v1
-
docker exec -it a09ac842ebb8 /bin/bash
-
docker run -p 11211:11211 --name memcache hub-mirror.c.163.com/library/memcached
-
-
查看正在运行的容器
-
- docker ps -a
-
删除容器
docker rm redis
- 查看容器资源使用状态
- docker stats
- 删除容器镜像
docker rmi -f fd484f19954f -
migration of docker
- docker save app:1.0 | gzip | DOCKER_HOST=ssh://user@remotehost docker load
- docker save ubuntu:14.04 | gzip | DOCKER_HOST=ssh://lemaker@p10 docker load
- sudo docker save xapian-v1 > ./xapian-v1.tar
- docker save img-dnn-v1 > ./img-dnn-v1.tar
- silo-v4
- docker save silo-v4 > ./silo-v4.tar
- docker save hadoop2.7-v1 > ./hadoop2.7-v1.tar
- docker load < ./img-dnn-v1.tar - load the image on the other host
- docker load < ./specjbb-v1.tar
- docker export --output=“alpine-t.tar” 35f34fabfa84
-
批量操作
- 启动所有容器
- docker start $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
- 关闭所有容器
- docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
- 删除所有容器
- docker rm $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
- docker rm $(docker ps -q -a)
- docker rmi $(docker images | grep “none” | awk ‘{print $3}’)
-
resposity
- docker tag username/repository:tag # Tag for upload to registry
- docker push username/repository:tag # Upload tagged image to registry
- docker run username/repository:tag # Run image from a registry
4. 更新和查看容器资源
- docker container top Docker - 查看容器进程在宿主机的 PID
- docker update --cpus 8 -m 3G --memory-swap 3G 387dbda70f60
- docker update 6d218433215e --cpus 1 -m 200M --memory-swap 200M
- docker update 48857a9d95af --cpus 2 -m 4096M --memory-swap 4096M
- docker update 3863cf3989b2 --cpus 2 -m 300M --memory-swap 300M
- docker container update --cpus 1 -m 200M --memory-swap 200M $(docker container ls -a -q) - docker inspect youthful_gates | grep -E -i “CPU|Memory”
- docker inspect 3863cf3989b2 | grep -E -i “CPU|Memory”
- docker inspect my-memcache | grep Memory
- docker container ls -q -Only display container IDs
- docker container ls -a # List all containers, even those not running
- docker container stop # Gracefully stop the specified container
- docker container kill # Force shutdown of the specified container
- docker container rm # 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
# 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
5. 主机和容器交互
- In order to copy a file from a container to the host, you can use the command
- docker cp :/file/path/within/container /host/path/target
Here’s an example:-
sudo docker cp 19f9b96728f8:/tailbench/lats.bin .
-
sudo docker cp ceb3d30c21b1:/silo/lats.bin .
-
The first example copies a file from the /tmp directory on the host machine into the Grafana install directory in the grafana container:
-
**docker cp ./HiBench-7.0.tar.gz a53dabf070a2:/home/lemaker/open-source/ **
-
docker cp ./specjbb cool_bell:/
-
docker cp ./spark-2.3.0-bin-hadoop2.7 heuristic_gagarin:/home/open-source/
-
docker cp ./hadoop heuristic_gagarin:/home/open-source/hadoop-2.7.7/etc/
-
docker cp ./scripts-chameleon heuristic_gagarin:/home/
-
docker cp ./tailbench.inputs/shore frosty_varahamihira:/tailbench.inputs/
-
docker run -d -p 26:22 lilelr/ssh_link:v1
-
ssh test@127.0.0.1 -p 26
-
6. tailbench
-
python3 /silo/parselats.py /silo/lats.bin
-
python3 …/parselats.py ./lats.bin
7. docker 镜像源配置
vi /etc/docker/daemon.json
{
“registry-mirrors”: [“http://hub-mirror.c.163.com”]
}
8. 容器构建
-
docker build -t lele_hadoop .
-
RUN groupadd --gid 5000 newuser
&& useradd --home-dir /home/newuser --create-home --uid 5000
–gid 5000 --shell /bin/sh --skel /dev/null newuser -
docker build -t barbell .
-
docker -p 6379:6379 -p 6379:6379