docker学习笔记
centos版本安装docker
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl enable --now docker
镜像管理
查看进行分层历史
docker image history nginx
查看镜像信息
docker inspect nginx
搜索镜像
docker search centos
docker search -s 100 centos #搜索点赞100个以上的镜像
docker search --filter=stars=100 centos
下载镜像
docker pull nginx
docker pull nginx:tag
指定镜像下载
docker pull docker.io/library/mysql:5.7.29
docker pull mysql:5.7.29
docker存放目录
/var/lib/docker/overlay2
查看docker版本信息
docker info
查看本地镜像
docker images
docker images -q #查看进行ID
docker images --no-trunc #查看完整信息
docker images nginx #查看指定镜像
docker image inspect alipne #查看详细
docker镜像加速配置
mkdir -p /etc/docker
/etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1bsxqeor.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
镜像导出/导入
docker save IMAGE -o /path/file.tar
docker save IMAGE > /path/file.tar
docker load -i /data/alpine.tar
docker load < /data/alpine.tar
删除镜像
docker rmi IMAGE
-f 强制
docker rmi nginx tomcat
docker rmi -f `docker images -q` #删除所有镜像
镜像打标签
docker tag alpine alpine:3.11
总结:企业中常用镜像操作:搜索、下载、导入、导出、删除
docker search centos
docker pull centos
docker images
docker save IMAGE -o /path/file.tar
docker load -i /data/file.tar
docker rmi 镜像ID/镜像名称
容器操作基础命令
运行容器
docker run hello-world
docker run [option] [image] [shell] [args]
-it shell 必须运行shell才支持进入
-d 后台运行
exit 从容器内退出,并停止容器
ctrl+p+q 从容器退出,且容器不停止
容器启动流程
开始--docker会在本地寻找镜像--判断本地是否有镜像--有--使用这个镜像
--无--去dockerhub上下载--找到下载到本地(或找不到返回错误)--使用镜像
一次性运行容器中的命令
docker run busybox echo "Hello World"
运行交互式容器并退出
docker run -it --name b2 busybox sh
exit
exit退出后容器也会停止
一次性运行容器,退出后删除,用于测试
[root@docker01 ~]# docker run --rm --name b3 busybox ls /
bin
dev。。。
守护式容器
能够长期运行
无需交互式会话
适合运行应用程序和服务
后台运行
[root@docker01 ~]# docker run -d --name n1 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:0e188877aa60537d1a1c6484b8c3929cfe09988145327ee47e8e91ddf6f76f5c
Status: Downloaded newer image for nginx:latest
e42615049522fbbfffeff631bb9184479620fd7987e0731c383382ae70ca3c30
设置开机自动运行容器
[root@docker01 ~]# docker run --name n2 --restart=always -p 80:80 nginx
--privileged选项,使用该参数,容器内的root拥有真正的root权限
#docker run -it --privileged centos
本地运行docker官方文档
[root@docker01 ~]# docker run -it -d -p 4000:4000 docs/docker.github.io:latest
显示运行的容器
#docker ps
显示全部容器,包括退出状态的容器
#docker ps -a
只显示容器ID
#docker ps -a -q
显示容器大小
#docker ps -a -s
显示最新创建的容器(停止的也能显示)
#docker ps -l
查看容器内的进程
#docker top container
查看容器资源使用情况
#docker stats 9a3fb2d8b079
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
9a3fb2d8b079 intelligent_rubin 0.00% 3.504MiB / 15.67GiB 0.02% 30.6kB / 1.05MB 0B / 0B 133
查看容器的详细信息
[root@docker01 ~]# docker inspect 9a3fb2d8b079
选择性查看
[root@docker01 ~]# docker inspect -f "{{.Id}}" nginx:n2
c95f2a23232996e601a88cade26939b60594d46cdfad7cfe8187b43797979324
删除容器
docker rm [option] container
-f 强制删除
删除所有
#docker rm -f `docker ps -a -q`
#docker ps -a -q | xargs docker rm -f
删除指定容器
#docker rm `docker ps -qf status=exited`
容器启动和停止
#docker start|stop|restart|pause|unpause 容器ID
批量正常启动或关闭所有容器
docker start $(docker ps -a -q)
docker stop $(docker ps -a -q)
启动并进入容器
docker run --name=c1 ubuntu bash
docker kill 可以给正在运行的容器发信号
docker kill 容器
-s 默认kill
范例
#docker kill nginx1
关闭所有容器
#docker kill `docker ps -a -q`
进入正在运行的容器
常见用法
#docker exec -it 容器ID bash|sh
#一次执行
docker exec 2478 cat /etc/redhat-release
进入容器,执行命令,退出容器不停止
docker exec -it 2478 sh
暴露所有容器端口
docker run -P 将容器中的所有端口映射宿主机的随机端口默认从32768开始
docker run -d --name n2 -P nginx
查看容器端口映射关系
[root@docker01 ~]# docker port n2
80/tcp -> 0.0.0.0:32769
指定端口映射
docker run -p
1 将容器端口映射本地随机端口
docker run -p 80 --name n1 nginx
2 将容器端口80映射本地端口81
docker run -p 81:80 --name n2 nginx
查看容器日志
docker logs container
-f
--tail 10
修改容器hosts文件
#docker run --add-host www.magedu.com:2.2.2.2 busybox
指定容器DNS
容器dns默认使用宿主机dns
1 将dns地址配置在宿主机
2 在容器启动项时加选项-dns=x.x.x.x
3 在/etc/docker/daemon.json文件中指定
#docker run --dns 1.1.1.1 centos
[root@docker01 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://1bsxqeor.mirror.aliyuncs.com"],
"dns": ["114.114.114.144","119.29.29.29"]
}
systemctl restart docker
指定domain名
#docker run --dns-search a.com --dns-search b.com busybox
容器和宿主机之间复制文件
docker cp
-a 保留一切
-L 复制链接
将容器内文件复制到宿主机
docker cp 6f37b72e0a89:/etc/centos-release .
将宿主机文件复制到容器内
docker cp /etc/issue 6f37b72e0a89:/root/
传递环境变量使用-e或-env-file实现
#docker run --name mysql-test1 -v /data/mysql:/var/lib/mysql -e
MYSQL_ROOT_PASSWARD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_
USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.30
#docker run --name mysql-test1 -v /data/mysql:/var/lib/mysql
--env-file=env.list -d -p 3306:3306 mysql:5.7.30
cat env.list
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASES=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppass
docker镜像制作
docker commit #修改现有容器,手动构建镜像
docker build #通过Dockerfile文件,批量构建镜像
制作镜像与容器状态无关,停止状态也可以制作镜像
手动制作镜像步骤
1 下载一个基础官方镜像,如centos或ubuntu
2 基于基础镜像启动一个容器,并进入容器
3 在容器中做配置操作
安装基础命令
配置与运行环境
安装服务和配置服务
放入业务代码
4 提交一个新镜像 docker commit
5 基于创建的镜像创建容器并测试访问
案例基于busybox制作http镜像
1 制作一个基础镜像
#docker run -it --name b1 busybox
2 镜像中配置运行环境
#mkdir -p /data/html
#echo httpd website in busybox > /data/html/index.html
3 以容=容器为基础提交一个制作后的镜像
方式1
#docker commit -a "duan.peng@dky" -c "CMD /bin/httpd -f -h /data/html" -c "EXPOSE 80" b1 httpd-busybox:v1.0
方式2
#docker commit -a "duan.peng.dky" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -c "EXPOSE 80" b1 httpd-busybox:v2.0
制作好的镜像查看
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd-busybox v2.0 a338acef0281 36 minutes ago 1.22MB
httpd-busybox v1.0 150b369e58b9 39 minutes ago 1.22MB
4 以制作好的镜像启动一个容器
docker run -d -P --name httpd01 httpd-busybox:v1.0
5 查看映射的端口
docker port httpd01
6 查看容器的详细信息
docker inspect httpd01
7 进入容器查看变化
docker exec -it httpd01 sh
8 测试访问
[root@localhost ~]# curl 172.16.104.2:32768
httpd website in busybox
docker仓库
1 上传镜像前需要docker login命令登录,登录后生成~/.docker/config.json文件中保存验证信息

浙公网安备 33010602011771号