一、Docker容器
1、创建容器
- create 新建容器
docker@default:~$ docker create -it ubuntu
c62f0a2b48e65831cf6b0875826a043f1e301603bb83733b9cea8852b848a015
docker@default:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c62f0a2b48e6 ubuntu "/bin/bash" 15 seconds ago Created elastic_vaughan
- start 启动容器
docker@default:~$ docker start c62f0a2b48e6
c62f0a2b48e6
# start 启动容器,可以根据容器ID或者容器名启动
- run 新建并启动容器
docker@default:~$ docker run ubuntu /bin/echo 'Hello World'
Hello World
- exec -i -t 启动一个bash终端,允许用户交互
docker@default:~$ docker exec -it c62f0a2b48e6 /bin/bash
root@c62f0a2b48e6:/#
# 进入终端,需要该容器已经启动,即docker ps 能够查询到。
# -t选项让Docker分配一个伪终端并绑定到容器标准输入上
# -i则让容器的标准输入保持打开
- 守护状态运行-d
docker@default:~$ docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
926b3891632458cf389cb6a654167bcf318aac74cae162038b1faf3577365f94
docker@default:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
926b38916324 ubuntu "/bin/sh -c 'while t…" 8 seconds ago Up 8 seconds practical_wozniak
# -c 表示容器执行的CONMMAND命令
# 可以结合容器ID,使用logs命令,查看信息输出
docker@default:~$ docker logs 926b38916324
hello world
hello world
hello world
hello world
hello world
hello world
2、终止容器
- stop 停止容器
# 通过容器ID停止容器
docker@default:~$ docker stop c62f0a2b48e6
c62f0a2b48e6
# docker ps -a 可查看所有状态的容器,启动的,停止的
docker@default:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
926b38916324 ubuntu "/bin/sh -c 'while t…" 11 minutes ago Exited (137) 9 minutes ago practical_wozniak
287ebd6ff46e ubuntu "/bin/echo 'Hello Wo…" 20 minutes ago Exited (0) 20 minutes ago jovial_carson
c62f0a2b48e6 ubuntu "/bin/bash" 23 minutes ago Exited (0) 4 minutes ago elastic_vaughan
3、删除容器
- 单个删除容器
docker@default:~$ docker rm 926b38916324
926b38916324
- 批量删除容器
# 1、通过grep关键字匹配,删除
docker@default:~$ docker rm `docker ps -a|grep Exited|awk '{print $1}'`
# 2、通过xargs
docker@default:~$ docker ps -a|grep Exited|awk '{print $1}'|xargs docker rm
# 3、删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
docker@default:~$ docker rm $(sudo docker ps -a -q)
# 4、根据容器的状态,删除Exited状态的容器
docker@default:~$ docker rm $(sudo docker ps -qf status=exited)
# 5、docker containers prune 命令,删除孤立的容器
docker@default:~$ docker container prune
二、私有仓库
1、创建私有仓库
# 1、创建一个私有仓库,并通过-v 指定镜像文件存放本地路径
docker@default:~$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry --name my_registry registry
00b2b059f9eec22b37e097c07d2dd6d2fe55f263be2538a9b473a940bbe8bfa8
docker@default:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00b2b059f9ee registry "/entrypoint.sh /etc…" 2 seconds ago Up 2 seconds 0.0.0.0:5000->5000/tcp my_registry
2、连接私有仓库
\qquad Chrome访问http://192.168.99.100:5000/v2/ ,获得一个空的JSON字符串
{}
3、管理私有仓库镜像
# 1、使用tag命令将ubuntu的镜像标记为test镜像
# docker tag image[:tag] [registryhost/][username/]Name[:tag]
docker@default:~$ docker tag ubuntu:latest 192.168.99.100:5000/test
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 94e814e2efa8 13 days ago 88.9MB
192.168.99.100:5000/test latest 94e814e2efa8 13 days ago 88.9MB
# 2、使用docker push 上传镜像
docker@default:~$ docker push 192.168.99.100:5000/test
The push refers to repository [192.168.99.100:5000/test]
b57c79f4a9f3: Pushed
d60e01b37e74: Pushed
e45cfbc98a50: Pushed
762d8e1a6054: Pushed
latest: digest: sha256:f2557f94cac1cc4509d0483cb6e302da841ecd6f82eb2e91dc7ba6cfd0c580ab size: 1150
4、查看镜像
\qquad 使用Chrome访问http://192.168.99.100:5000/v2/_catalog,返回JSON字符串
{"repositories":["test"]}
5、测试镜像
# 1、删除标记的镜像
docker@default:~$ docker rmi 192.168.99.100:5000/test
Untagged: 192.168.99.100:5000/test:latest
Untagged: 192.168.99.100:5000/test@sha256:f2557f94cac1cc4509d0483cb6e302da841ecd6f82eb2e91dc7ba6cfd0c580ab
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 94e814e2efa8 13 days ago 88.9MB
# 2、pull image
docker@default:~$ docker pull 192.168.99.100:5000/test
Using default tag: latest
latest: Pulling from test
Digest: sha256:f2557f94cac1cc4509d0483cb6e302da841ecd6f82eb2e91dc7ba6cfd0c580ab
Status: Downloaded newer image for 192.168.99.100:5000/test:latest
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.99.100:5000/test latest 94e814e2efa8 13 days ago 88.9MB
ubuntu latest 94e814e2efa8 13 days ago 88.9MB
# 3、更换标签
docker@default:~$ docker tag 192.168.99.100:5000/test ubuntu:14.xx
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.99.100:5000/test latest 94e814e2efa8 13 days ago 88.9MB
ubuntu 14.xx 94e814e2efa8 13 days ago 88.9MB
ubuntu latest 94e814e2efa8 13 days ago 88.9MB
三、Docker 命令总结
1、docker network
# docker network 是建立容器之间的网络的
# 1、docker network ls
# 默认的网络有3类
docker@default:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
71dc70d3c422 bridge bridge local
810ebe7af5ed host host local
83c53a6541d3 none null local
# 2、docker network create
# 默认创建网络类型是bridge
docker@default:~$ docker network create huangfei
d3c01b2a45672f46fb6fc9f1224256325cfda72657324e40cc1325db46e14609
docker@default:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
71dc70d3c422 bridge bridge local
810ebe7af5ed host host local
d3c01b2a4567 huangfei bridge local
83c53a6541d3 none null local
# 3、将容器加入已有的网络
# docker network connect [网络名] [容器名/容器ID]
docker@default:~$ docker network connect huangfei my_container
# 4、删除网络
docker@default:~$ docker network rm huangfei
huangfei
四、Docker环境相关问题
1、windows 下搭建docker,更改docker镜像
\qquad
在linux下,通过修改/etc/docker/daemon.json
文件,增加
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["192.168.99.100:5000"]
}
registry-mirrors:下载镜像的地址
insecure-registries:私有仓库的地址和端口
\qquad
而使用window toolbox搭建的docker环境,需要修改/var/lib/boot2docker/profile
文件,
\qquad
此时,我们在 --label provider=virtualbox
的下一行添加下述代码
--registry-mirrors https://registry.docker-cn.com
--insecure-registry 192.168.99.100:5000
\qquad
重写启动docker,在linux下,systemctl restart docker
,在windows下,/etc/init.d/docker restart