Docker笔记

Docker笔记

一、docker的下载安装

官网下载地址:https://docs.docker.com/engine/install/centos/。可以按照官网的步骤下载安装。以centos为例,大致如下:
1、安装yum-utils包(它提供yum-config-manager实用程序)并设置存储库。

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、安装docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3、测试

docker -v
docker images
docker run hello-world

4、启动/停止docker

systemctl start docker
systemctl stop docker

5、配置镜像服务ACR
以阿里云为例,登录官网,产品–>容器–>容器镜像服务ACR–>镜像工具–>镜像加速器。按照提示执行指令。

二、docker基本命令

可以从官网:https://docs.docker.com/engine/reference/commandline 查看具体的使用方法。
1、从远程镜像仓库拉取镜像。登录官方镜像仓库:hub.docker.com,搜索自己想要的软件和版本号,复制下指令便可以执行。补充以下:pull下来的镜像默认存放在/var/lib/docker/image/overlay2/imagedb目录,容器存放在/var/lib/docker/containers目录。

#拉取镜像 docker pull [softName]:[version]
docker pull nginx:latest
docker pull dockette/jdk8
#构建(制作)镜像 docker build [OPTIONS] PATH | URL | -
docker build - < Dockerfile
docker build -t 'serviceName:1130' .   #--tag或者-t指定名字和版本
#创建标签或修改镜像名称 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Docker tag imageId service:8088
#上传镜像到指定仓库  docker push [OPTIONS] NAME[:TAG]
docker imageID push registry-host:5000/myadmin/rhel-httpd:latest
#查看本地已存在镜像 docker images [OPTIONS] [REPOSITORY[:TAG]]
docker images
docker images java #过滤镜像名称为java的镜像
docker history [image] #查看镜像历史
#删除镜像 docker rmi [OPTIONS] IMAGE [IMAGE...] 带-f可以强制删除正在运行的镜像
docker rmi fd484f19954f
docker rmi nginx:latest
#保存镜像(Save one or more images to a tar archive) docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o nginx.tar nginx:latest #-o指定输出为tar包
#加载镜像(Load an image from a tar archive or STDIN) docker load [OPTIONS]
docker load -i nginx.tar #-i指定加载的输入

2、从镜像中创建运行新容器,启动/停止容器,查看正在运行的容器,删除容器。查看容器日志。

#从镜像中创建运行新容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#-d后台运行; -p [主机端口]:[容器端口]/[tcp或者udp或者sctp] 将容器端口绑定到指定主机端口;--name设置容器名称
docker run -d -p 127.0.0.1:80:8080/tcp --name nginx01 nginx:latest 
#查看正在运行的容器
docker ps #显示容器(默认只显示正在运行的)
docker ps -a #显示所有容器(包括没有运行的)
docker ps -size #显示占用磁盘大小(size--写入层已使用大小,virtual size--只读镜像和写入层已使用总大小)
docker ps --filter "name=nginx" #显示过滤容器名称包含nginx的容器
docker ps --format "table{{.ID}}\t{{.Image}}" #显示部分选线
#启动容器 docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start 1c29786212dc #重新启动容器进程
#停止容器 docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop 1c29786212dc #容器还在,只是停止容器进程
#删除容器 docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm -f 413831fdca2f #删除容器 -f为强制删除正在运行的容器 
docker ps --filter status=exited -q | xargs docker rm 或者  docker rm $(docker ps --filter status=exited -q) #删除所有不在运行的容器
#查看容器日志
docker logs e4acfa0e888c
#查看容器详情 docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect nginx01

3、进入容器,在容器执行指令。

#进入容器,执行操作
docker exec e4acfa0e888c pwd #进入docker容器并执行一条指令
docker exec -it e4acfa0e888c sh #连接docker容器并打开一个shell操作窗口,然后可以类似和在主机系统上执行Linux命令一样,结束exit退出

4、数据卷。
数据卷是一个虚拟目录,用来标记容器内目录和宿主机目录之间的双向映射。这是由于docker容器都是按最小化打包的,可能不包含ll,vi这些指令。如果通过数据卷可以在宿主机修改容器内目录,同时容器内的数据也可以同步在宿主机,比如mysql数据库的存放目录。
已经存在的容器无法在挂载数据卷,所以要通过docker run命令重新创建带有数据卷挂在的容器。

#-v增加数据卷 [数据卷]:[容器目录]  默认路径:/var/lib/docker/volumes
docker run -d -p 127.0.0.1:82:8080 -v html:/usr/share/nginx/html --name nginx03 nginx:latest
#-v增加数据卷 [宿主机目录]:[容器目录]
docker run -d -p 127.0.0.1:83:8080 -v /usr/src/dockerTest/nginx04:/usr/share/nginx/html --name nginx04 nginx:latest
#查看数据卷列表
docker volume ls
#数据卷详情 docker volume inspect [OPTIONS] VOLUME [VOLUME...]
docker volume inspect html

5、网络。
docker容器创建后会以bridge(桥接)方式连接到docker的一个虚拟网桥上。同一虚拟网桥是互通的,可以通过ping容器名验证。

#查看docker虚拟网桥列表
docker network ls
#创建网桥 docker network create [OPTIONS] NETWORK
docker network create dockerNet01
#加入网桥 docker network connect [OPTIONS] NETWORK CONTAINER
docker network connect dockerNet01 nginx04
docker run --network dockerNet01 #也可以在运行容器时指定加入的网桥
#查看网桥详情 docker network inspect [OPTIONS] NETWORK [NETWORK...]
docker network inspect dockerNet01

三、自定义镜像

3.1、可以通过dockerfile自定义镜像。

实践例子如下:

3.1.1 使用Dockerfile制作java程序镜像
#指定基础镜像。可以从远程仓库下载也可以使用本地保存的jdk镜像。表示基于dockette/jdk8镜像构建。
FROM dockette/jdk8
#制作者名称或信息
MAINTAINER serviceName
#指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在则会创建目录
WORKDIR /app/serviceName/
#复制jar包(其实就是在jar包所在目录下启动容器)到指定工作目录
COPY serviceName-1.0.0.RELEASE.jar /app/serviceName/
#映射到宿主机的端口
EXPOSE 8098
#容器启动时需要执行的命令
CMD ["java","-jar","/app/serviceName/serviceName-1.0.0.RELEASE.jar","-Dfile.encoding=utf-8"]

#RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

然后使用build命令打包镜像:docker build -t=‘serviceName:01’(镜像名称:版本号) .
(需要注意指令后面的. 表示从当前目录找Dockerfile文件)。
启动部署容器:docker run -id --name containName(容器名称) --net=host -e JAVA_OPTS=‘-Duser.timezone=GMT+08’ -v /data/serviceName/(映射路径):/app/serviceName/ imageName:1130(镜像名称和版本号)
比如:docker run -it --privileged=true --restart=always --name deliver --net=host -e TZ=“Asia/Shanghai” -e spring.profiles.active=pro -e spring.application.name=deliver -v /appdata/xxx/deliver:/app/deliver -d deliver

四、实践

4.1、使用redis-cli连接redis

#1、使用inspect命令找到HostConfig-->Binds;找到对应的配置文件映射路径
docker inspect redis
#2、通过映射配置文件找到启动密码
cat /home/redis/redis.conf | grep "requirepass" -C 3
#3、使用exec指令进入容器通过redis-cli连接
docker exec -it redis redis-cli -h 127.0.0.1 -p 6379 -a password
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值