docker入门及常用命令

zwt00 2020-06-16

Dokcer
一、contos Docker 安装 (关闭 firewalld 及selinux)
1、卸载旧版本
# sudo yum remove docker     docker-client     docker-client-latest     docker-common     docker-latest     docker-latest-logrotate     docker-logrotate     docker-engine

2、更新docker yum 源 不更新源,会默认安装老旧版docker

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

3、安装docker 需要安装三个软件 docker-ce docker-ce-cli containerd.io

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

安装特定版本方式 :请在存储库中列出可用版本,然后选择并安装:
一个。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:

# yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
4、启动docker 验证 docker 是否安装成功

#  sudo systemctl start docker

通过运行hello-world?映像来验证是否正确安装了docker

# sudo docker run hello-world

或者使用 docker version /--vesion 查看 docker 版本信息
docker info 查看docker 详细信息
二、docker image 管理

1、docker image 仓库地址配置(安装好docker后建议配置成国内的仓库地址)
docker 官方镜像仓库地址 https://hub.docker.com/explore 从中国访问一般比较慢
Docker 国内镜像地址 https://registry.docker-cn.com
修改docker 默认仓库址 vim /etc/docker/daemon.json

{
       “registry-mirrors”:[“https://registry.docker-cn.com”]
       }

2、docker image 常用命令

命令用法
docker image history [image-name]查看镜像分层历史
docker image ls/list查看本地镜像列表 (等价于 docker images)
docker image rm [image-name]删除本地镜像
docker imgae tag给本地镜像打标记
docker image pull从默认仓库地址下载镜像
docker iamge prune删除不在用的镜像
docker image save导出(保存)本地镜像库镜像
docker image load导入镜像
docker image import导入容器文件系统tar归档文件创建镜像
docker export导出容器文件系统到tar归档文件
docker image inspect显示镜像详细信息


三、docker container 管理

1、创建容器命令: docker container run -itd --name container_name image_name
常用创建容器子命令(run)选项

选项含义
-i可以登录的交互式容器
-t给容器分配一个tty 伪终端
-d后台进行容器
--dns设置DNS服务器
-e设置变量,可以传入到容器中
--env-file list从文件中读取环境变量
-p发布容器端口到主机
-P发布容器所有的EXPOSE端口到宿主机随机端口
-h设置容器主机名
--ip指定容器的IP,只能用于自定义网络
--link list添加连接到另一个容器
--network添加连接到一个网络
--mount挂载宿主机分区到容器
-v, --volume list挂载宿主机目录到容器
--restart string容器退出时重启策略,默认no [always \ on-failure]
--add-host list添加其他主机到容器中/etc/hosts
-m, --memory容器可以使用的最大内存里
--memory-swap交换分区的大小
--memonry-swappiness=<0-100>容器使用SWAP分区的百分比(0-100,默认-1 不启用)
--memory-reservasion内存软件限制,docker检测主机容器争用或内存不足时所激活的软 限制,使用此选项,值必须低于--memory,以使优先
--oom-kill-disable当宿主机内存不足时,内核会杀死容器中的进程。建议设置--momery选项再禁用oom。如果没有设置,主机可能会耗尽内存
--cpus限制容器使用宿主机的核心数
--cpuset-cpus限制容器使用特定的CPU
--cpu-shares此值设置为大于或小于默认1024值,以增加或减少容器的权重,并使其可以访问主机CPU周期更大或更小比例

2、docker container 常用管理子命令

子命令用法
ls列出在运行的容器,-a选项列出所有容器
inspect显示一个或多个容器的详细信息
attach附加本地标准输入、输出和错误到一个运行的容器(进入容器)
exec在运行容器中执行命令
commit以一个运行中的容器创建一个新的镜像
cp宿主机与容器之间进行文件/文件夹的拷贝,用法: docker container cp 宿主机目录 container_name: 目录
logs获取一个容器的日志
port列出指定容器端口映射
stats显示容器资源使用统计
top显示一个容器运行的进程
update更新一个或多个运行中容器的配置(内存、CPU)
stop/start停止/启动一个或多个容器
rm删除一个或多个容器

四、管理容器应用程序数据----将宿主机数据挂载到容器中
docker 提供三种不同方式将数据挂载到容器中:

方式区别
volume 数据卷宿主机数据卷存放目录 /var/lib/docker/volumes
bind mounts可以将宿主机任意位置已经存在的文件挂载到容器中
tmpfs将宿主机内存中的文件挂载到容器中,不写入宿主机的文件系统

1、volume
(1)volume 的创建与子命令

volume子命令含义
create创建一个数据卷 例:# docker volume create nginx-vol;数据会存放在宿主机目录/var/lib/docker/volumes中
inspect显示数据卷的详细信息 例:# docker volume inspect nginx-vol
ls显示宿主机上存放的数据卷列表
prune删除所有不在用的数据卷
rm删除一个或者多个数据卷

(2)volume 挂载:在创建容器时挂载volume到容器

docker container run -itd --name nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

(3)清理volume

# docker container stop nginx-test 
# docker container rm nginx-test
# docker volume rm  nginx-vol

2、bind mounts

#  docker container run -itd --neme nginx-test1 --mount type=bind,src=宿主机目录,dst=/usr/share/nginx/html   nginx

注意:bind mounts 方式挂载文件目录时,会隐藏容器目标目录中的文件,只显示宿主机的源文件; 宿主机源文件不存在时,挂载时会报错
五、docker network
1、Docker 支持5种网络模式
(1)bridge
? 默认网络,docker 启动后默认创建一个docker0网桥,默认创建的容也是添加到这个网桥中。
(2)host
?容器不会获得一个独立的network namespace,而是与宿主机共用一个
(3)none
?获取独立的network namespace ,但不为容器进行任何配置网络。
(4)container
? 与指定的容器使用同一个network namespace,网上配置也是相同的
(5)自定义
? 自己义网桥,默认与bridge网络一样。
注意:同一网络中的容器可以通过容器名或主机名进行相互访问,不需要再进行网络配置
2、docker network 子命令

子命令作用
connect连接一个容器,与其共用一个网络
create创建一个网络
disconnect断开与容器共用的网络
inspect查看一个或多个网络的详细信息
ls显示网络列表
prune删除所有不在用的网络
rm删除一个或者多个网络

六、通过Dockerfile构建docer 镜像
1、dockerfile 常用指令

指令用法及含义
FORM构建的镜像是基于哪个镜像,例如:FORM contos:7
MAINTAINER镜像维护者姓名或邮箱地址,例如:MAINTAINER zhouzeheng
RUN构建时运行的shell命令 例如:RUM [“yum”,”install”,”httpd”] ? RUM yum install httpd
CMD运行容器时运行的命令? 例如:CMD [“-c”,”/start.sh”]? CMD [“/usr/sbin/sshd”,-D] ? CMD /usr/sbin/sshd -D
EXPOSE声明容器运行的服务端口,例如:EXPOSE 80 443
EVN设置容器内环境变量,例如:EVN MYSQL_ROOT_PASSWORD 123456
ADD拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或解压,例如:ADD <src>...<dest> ? ADD [“<src>”,...”<dest>”] ? ADD https://www.aaa.com/html.tar.gz /var/www/html ? ADD html.tar.gz /var/www/html
COPY拷贝文件或目录到镜像,用法与ADD相当 例如:COPY /root/start.sh /start.sh
ENTRYPOINT运行容器时执行的shell命令,例如 ENTRYPOINT [“/bin/bash”,”-c”,”/start.sh”]? ENTRYPOINT /bin/bash -c ‘/start.sh’
VOLUME指定容器挂载点到宿主机自动生成的目录或其他容器, 例如:VOLUME /var/lib/mysql
USER为RUN、CDM和ENTRYPOINT执行命令指定运行用户, 例如: USER zhouzeheng
WORKDIR配置容器工作目录,例如:WORKDIR /usr/share/nginx/html
HEALTHCHECK健康检查,例如: HEALTHCHECK --interval=5m --timeout=3s --tetries=3 CMD curl -f http://locahost/ -o exit 1
ARG在构建镜像时指定一些参数

ARG示例:

#在dockerfile里定议变量
 FROM  contos:7 
 ARG user
 USER  $user

 #docker image build --build-arg user=zhouzeheng Dockerfile

2、Dockerfile apache 案例

FROM                  centos:7
    MAINTAINER       zhouzeheng
    RUN                     yum install -y  gcc gcc-c++ make openssl-devel pcre-devel
    ADD                     nginx-1.18.0.tar.gz /tmp
    RUN                     cd /tmp/nginx-1.18.0 &&                                 ./configure  --prefix=/usr/local/nginx &&                                 make -j 2 &&                                 make install
    RUN                    rm -rf /tmp/nginx-1.18* && yum clean all
    EXPOSE             80
     CMD                   ["./usr/local/nginx/sbin/nginx", "-g", "daemon off;"]


3、使用Dockerfile 构建镜像

# docker image build [OPTIONS] PATH|URL|-

OPTIONS:
-t, --tag list 指定镜像名称及版本号 name:tag
-f, --file string 指定Dockerfile文件位置,例如:

# docker image build   -t   nginx:V1  -f     /path/Dockerfile     /path(关联上下文目录)


七、私用仓库搭建

1.1 docker官方私有仓库 registry构建
(1)创建挂载目录

# mkdir /tmp/registry

(2)拉取registry镜像

# docker image pull registry

(3)创建registry容器

# docker run -itd  --name registry --mounts type=bind,\ src=tmp/registry,dst=/var/lib/registry -p 1000  :5000   --restart=always registry

(4)使用客户机访问刚创建的容器仓库

# curl  http://ip:1000/v2/_catalog

1.2 私有仓库管理
(1) 在客户机上配置私有仓库可信任,在/etc/docker/daemon.json 文件大括号中加入一行,
注意:行与行之间用英文逗号隔开

“insecure-registries”:[“192.168.0.107:1000”]

(2)打标签

# docker tag nginx:1.0 192.168.0.107:1000/nginx:1.0

(3)上传镜像到私有仓库

# dokcer push 192.168.0.107:1000/nginx:1.0

(4)从私有仓库下载镜像

# dokcer pull 192.168.0.107:1000/nginx:1.0

(5)列出镜像标签

# curl  http://192.168.0.107:1000/nginx/tags/list

相关推荐