docker基础学习笔记

一,安装(centos)

1.查看内核版本 必须再7以上

uname -r

2.确保yum命令包最新

yum update

3.卸载旧版本(如果安装过旧版的)

yum remove docker-common docker-selinux docker-engine

4.安装需要的软件包

  • yum-utils 提供yum-config-manager功能

  • 另外两个是devicemapper驱动依赖的

    yum install -y yum-utils device-mapper-persistent-data lvm2

5.设置yum源

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

6.安装docker

 sudo yum install docker-ce docker-ce-cli containerd.io

7.验证docker安装ok

docker version

8.启动docker 并设置开机启动

systemctl start docker 启动
systemctl enable docker 并设置开机启动

9.测试hello-world

docker run hello-world
# 先从本地获取,本地找不到会从远程仓库(默认国外仓库https://hub.docker.com/)拉取到本地再运行,下次可以直接本地运行

 

配置阿里云镜像仓库

默认远程仓库 docker hub ——国外仓库https://hub.docker.com/,访问国外主机速度较慢

步骤

1.登陆进入阿里云镜像服务 https://cr.console.aliyun.com/

登录后——>搜索容器镜像服务——>镜像加速器——>加速器地址(即配置地址)

2.在 /etc/docker 目录下找到daemon.json文件(没有就新建),将下面内容写入:

# 填入刚才的加速器地址
{
"registry-mirrors": ["https://fvt25l0y.mirror.aliyuncs.com"]
}

 

3.重启daemon

systemctl daemon-reload

4.重启docker服务

systemctl restart docker

5.测试是否配置完成

docker info  # 查看docker基本信息

# 能看到以下信息,说明ok
......
Registry Mirrors:
https://fvt25l0y.mirror.aliyuncs.com/
......

 

二,基本操作

基本命令

启动docker: systemctl start docker

停止docker :systemctl stop docker

重启docker:systemctl restart docker

开机自启动docker:systemctl enable docker

查看docker概要信息:docker info

查看docker帮助文档:docker --help

查看docker版本信息:docker version

 

docker镜像

列出所有镜像:docker images

搜索镜像:docker search

下载镜像:docker pull 镜像名:版本号 (只写镜像名默认拉取最新的)

删除镜像:docker rmi 镜像名:版本号

  • 如果有以该镜像运行的容器,则无法删除

  • docker rmi -f :强制删除——>先暂停容器,再去删除镜像

  • 删除多个:docker rmi a:1.0 b1.0 不写版本号默认删除最新的

  • 删除全部:docker rmi -f $(docker images -qa)

    • -q 只显示容器编号

    • -a 显示所有

 

docker 容器

创建并启动容器:docker run [OPTIONS] IMAGE 【容器中要执行的命令】[ARGS...]

通过镜像id来启动一个容器,不带命令时 默认以 /bin/bash 启动

  • 普通启动

#命令:
docker run -it --name mycenos01 镜像id (推荐用id)
docker run -it --name mycenos01 镜像名:版本号
#说明
-t     表示以交互模式运行,进入容器,分配一个伪终端
--name 容器别名
镜像id   指定镜像模板
  • 守护式方式启动

#命令:
docker run -di --name mycenos02 镜像id
#说明
-d   后台运行容器,并返回容器id
  • 指定映射端口启动

# docker run -it -p 8888:8080 镜像id
#说明
8888:8080 : 8888为宿主机端口 8080为容器指定端口(一般会有默认端口)
-p 指定宿主机映射到容器的端口
-P 大写P:随机指定宿主机映射端口

 

列出容器 docker ps 【OPTIONS】

docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps -n 2 显示最近创建的2个容器
docker ps -f status=exited 查看停止的容器

退出容器 exit 或者 Ctrl + P + Q

exit 或 Ctrl + C  停止并退出容器
Ctrl + P + Q     容器还在运行,不停止,只退出终端

进入容器 docker attach 容器id(或名称)

启动容器 docker start 容器id(或名称)

重启容器 docker restart 容器id(或名称)

停止容器 docker stop 容器id(或名称)

  • 强制关闭:docker kill 容器id(或名称) 不建议

删除容器 docker rm 容器id

  • 正在运行的rm无法直接删除

  • 强制删除:docker rm -f

  • 删除多个:docker rm 容器a 容器b

  • 删除所有:docker rm -f $(docker ps -qa)

进阶命令

docker exec

在运行的容器中执行命令:docker exec -it 容器名称(id) 执行命令

执行 /bin/bash 命令 可用来进入容器内

docker exec -it 容器id ls -l /sys
docker exec -it 容器id /bin/bash # 进入容器交互模式
docker exec -it 容器id sh /home/bin/xxx
docker exec -it redis redis-cli   # 进入redis客户端
交互

docker logs

查看容器日志 docker logs 容器id

清除日志:可以进入目录直接删除,地址:

/var/lib/docker/containers/

docker top

查看容器进程 docker top 容器id

docker cp

宿主机和容器之间的文件拷贝 docker cp

# 宿主机文件 拷贝到 容器
docker cp 要拷贝的文件或目录 容器名称(或id) : 容器目录
# 拷贝到容器指定目录
dcoker cp /home/dog.jpg 容器id:/temp/
# 拷贝到容器指定目录,并重命名
dcoker cp /home/dog.jpg 容器id:/temp/doggg.jpg

# 容器内文件 拷贝到 宿主机

docker commit

定制自己的镜像 docker commit

提交运行中的容器为一个新的镜像模板

一般拉取的官方镜像,可能需改一些配置等,在作为一个新的镜像去运行容器。

自定义镜像:根据已存在运行的容器(一般容器内部修改过)生成新的镜像模板

docker commit -a='作者' -m '备注' 运行中的容器id 新镜像名
# 本地可以查看到新生成的镜像 docker images
# 然后就可以根据新的镜像来运行容器

docker push

发布自定制镜像 docker push

# 1.登录hub
docker login

# 2.发布新镜像到自己的线上仓库
docker push 新镜像名(id)

docker inspect

查看容器的元信息

"IPADDRESS"    容器分配的虚拟ip
"Source"   宿主机挂载目录
"Destination" 容器挂载目录

 

三,docker容器目录挂载

简介

容器目录挂载:

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行关联映射,这样就能实现两者间目录中 **数据双向自动同步**

 

作用

通过cp来同步数据太麻烦;

通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求

 

实现

命令:

docker run -it -v /宿主机目录:/容器目录 镜像名
# 指定目录不存在时会自动创建

多目录挂载:

docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名

挂载目录只读 read only

docker run -it -v /宿主机目录:/容器目录:ro 镜像名

 

注意:

如果你同步的是多级目录,可能会出现权限不足的提示;

这是因为Centos7中的安全模块selinux把权限禁掉了,需要添加 --privileged=true 来解决挂载的目录没有权限的问题

 

docker启动mysql57

1.拉取镜像后,用镜像id启动

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 9cfcce23593a

2.同步容器中的相关配置文件到宿主机指定目录

主要是为了目录的同步挂载

docker cp 容器id:/etc/mysql/conf.d /home/mysql
docker cp 容器id:/var/log /home/mysql
docker cp 容器id:/var/lib/mysql /home/mysql

3.停止容器后重新以文件挂载方式启动

挂载以上三个目录

docker stop 容器id

 

四,docker-file

定义:以脚本方式构建镜像

基础参数命令

FROM 基础镜像名   # 基于某个基础镜像
ENV key value   # 设置环境变量(可以写多条)
RUN command # 构建容器时需要运行的命令,一般用来安装一些工具包
WORKDIR path_dir # 设置终端默认登陆进来的工作目录
EXPOSE port # 当前容器对外暴露的端口
ADD source_dir/file dest_dir/file # 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,不能自动解压
VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
CMD # 指定容器启动时要运行的命令,假如有多个最后一个生效

 

使用dockerfile

1.编写一个名为mycentosDockerfile的文件

FROM centos   # 基于某个基础镜像
MAINTAINER yangdisi<13875045745@163.com> # 作者信息
LABEL name="xxx centos image"
build-date="2020-06-23"   # key-value形式,镜像的描述信息

ENV WORKPATH /home/ # 定义环境变量,可通过多行定义多个
WORKDIR $WORKPATH # 使用变量,指定工作空间

# 构建容器时执行一些命令,基础容器很精简,需要安装一些工具
RUN yum -y install net-tools
RUN yum -y install vim

EXPOSE 80   # 对外暴露的端口
CMD /bin/bash # 指定容器启动时要运行的命令,假如有多个最后一个生效

注意B: 当 ENTRYPOINT 后面跟CMD 时,CMD当作前者的参数使用:

 

2.构建DockerFile

构建会生成一个自定义的新镜像

docker build -f mycentosDockerfile -t 镜像名 .  # 后面的 . 不能掉

 

原文地址:https://www.cnblogs.com/Deaseyy/p/13341800.html