记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。
 
0

docker容器学习笔记

发表者:admin分类:云计算容器2020-04-28 14:46:55 阅读[1088]

1. Docker的安装

1.1 yum源准备

cd /etc/yum.repos.d/

rm -rf ./*

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

yum makecache

1.2安装依赖包及docker-ce

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

yum list docker-ce.x86_64 --showduplicates | sort –r

yum install -y docker-ce  

1.3启动docker

systemctl daemon-reload   #服务进程

systemctl start docker      

1.4测试

docker run hello-world

docker version

2. Docker卸载

yum remove docker-ce

rm -rf /var/lib/docker

3. 配置镜像加速

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"]

}

EOF

systemctl daemon-reload

systemctl restart docker

4. Docker的镜像基础管理

4.1获取镜像

基础镜像获取

docker search centos

docker pull centos:6.9

docker pull centos:7.5.1804

docker pull nginx

4.2镜像的基本查看

docker image ls

标识镜像唯一性的方法

1.REPOSITORY:TAG

centos:7.5.1804

2.IMAGE ID

4.3镜像详细信息查看

docker image ls

docker image ls --no-trunc

docker image inspect IMAGE ID(eg: 2199b8eb8390)

docker image inspect --help  #帮助查看

4.4 只查看镜像ID

docker image ls -q

4.5镜像的导入和导出

docker image save nginx >/opt/nginx.tar.gz  备注:nginxREPOSITORY

docker image load -i /opt/nginx.tar.gz

docker image save IMAGE ID >/tmp/xx.tar

docker image load -i /tmp/xx.tar  

docker image tag IMAGE ID xx:xxx 备注:REPOSITORYTAG标签

4.6镜像的删除

docker image rm -f IMAGE ID 备注:删除镜像 -f强制看情况添加

docker image rm –f `docker image ls -q` 备注:全部删除

5. 容器的管理

5.1交互式运行一个容器

docker run -it cf49811e3cdb

 

docker container ls

 

CONTAINER ID容器的唯一号码

NAMES:容器的名字(可以自动,也可以手工指定)

备注:docker container run -it --name=”xf” cf49811e3cdb  container可要可不要

--name=”xf”指定名字

docker rm xf  删除容器

docker container run -it --name=”xf” --rm cf49811e3cdb退出时附带删除容器

5.2查看容器状态

docker container ls   #现在

docker container ls –a

docker container ls –a –q    #显示所有容器的id

docker container ls –a     #显示最新容器的id

docker ps    #早期

docker ps -a

5.3守护式运行一个容器

docker run -d --name="zy" nginx

5.4查询容器详细信息

docker container inspect zy

5.5容器的应用场景

交互式的容器:工具类:开发,测试,临时任务

守护式容器:服务

通过端口映射提供对外服务

docker run -d -p 8080:80 --name="zy_nginx_80" nginx 输入宿主机IP:8080即可访问nginx服务

5.6容器的启动\关闭\连接

守护式容器关闭和启动

docker stop zy_nginx_80  #推荐

docker kill    #暴力

docker start zy_nginx_80

交互式容器关闭和启动

docker stop centos_xf    

docker start -i centos_xf

容器的连接方法

docker container attach centos_xf

子进程的方式登录(在已有容器中生成子进程,做登录,可以进行容器的调试,退出也不会影响当前容器)

docker container exec -it centos_xf /bin/bash

5.7容器的后台及前台运行

1.ctrl + P,Q

attach调用到前台

2.死循环

6.docker容器的网络访问

指定映射(docker会自动添加一条iptables规则来实现端口映射)

-p hostPort:containerPort

Eg: docker run -d -p 8080:80 --name="zy_nginx_80" nginx

-p ip:hostPort:containerPort

Eg: docker run -d -p 192.168.85.22:8081:80 --name="zy_nginx" nginx

-p ip::containerPort(随机端口)

Eg: docker run -d -p 192.168.85.22::80 --name="xf_nginx" nginx

-p hostPort:containerPort/udp

-p 81:80 –p 443:443

随机映射

docker run -p 80(随机端口)

5.8查看容器进程的情况

docker container top a1523e859360  #container可以不写

6.docker日志

docker logs [OPTIONS] CONTAINER

  Options:

        --details        显示更多的信息

    -f, --follow         跟踪实时日志

        --since string   显示自某个timestamp之后的日志,或相对时间,如42m        --tail string    从日志末尾显示多少行日志, 默认是all

    -t, --timestamps     显示时间戳

        --until string   显示自某个timestamp之前的日志,或相对时间,如42m

Eg:  docker logs zy_nginx

Eg:  docker logs –t zy_nginx

6.1 docker cp :用于容器与主机之间的数据拷贝(手工交互数据)

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|

Eg:docker container cp zy_nginx:/usr/share/nginx/html/xx.html ./

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Eg:docker container cp xx.html zy_nginx:/usr/share/nginx/html/

7.volume实现宿主机和容器的数据共享

mkdir –p /opt/html

docker run –d –name=”zy_nginx_1” -p 83:80 -v /opt/html:/usr/share/nginx/html nginx

8.数据卷容器

宿主机模拟数据目录mkdir -p /opt/volume/amkdir -p /opt/volume/btouch /opt/volume/a/a.txttouch /opt/volume/b/b.txt启动数据卷容器docker run -it --name "nginx_volumes" -v /opt/volume/a:/opt/a -v /opt/volume/b:/opt/b centos /bin/bashctrl p q使用数据卷容器docker run -d -p 8085:80 --volumes-from nginx_volumes --name "n8085" nginxdocker run -d -p 8086:80 --volumes-from nginx_volumes --name "n8086" nginx

作用:集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数据卷容器进行统一管理

制作容器能访问的本地yum

192.168.85.22  即虚拟机处执行以下步骤

注:关闭selinux和防火墙

vim /etc/sysconfig/selinux

systemctl stop firewalld

systemctl disable firewalld

安装vsftpd软件并启动设置自启

yum -y install vsftpd

systemctl start vsftpd

systemctl enable vsftpd

上传镜像到虚拟机 /mnt

配置yum仓库

mkdir -p /var/ftp/centos7.7

mount -t iso9660 -o loop /mnt/CentOS-7-x86_64-DVD-1908.iso /var/ftp/centos7.7/

加入开机自启

vim /etc/rc.local

mount -t iso9660 -o loop /mnt/CentOS-7-x86_64-DVD-1908.iso /var/ftp/centos7.7/

sh /etc/rc.local

172.17.0.1 docker容器处执行以下步骤

cd /etc/yum.repos.d/

移动不要的文件  

mv * /tmp

编辑新文件

vi ftp_7.repo

[ftp]

name=ftpbase

baseurl=ftp://172.17.0.1/centos7.7

enabled=1

gpgcheck=0

清理并做个缓存  yum clean all && yum makecache

:docker  centosBug  Failed to get D-Bus connection: Operation not permitted

原因:centos7docker容器里面不能用service启动服务。

报这个错的原因是dbus-daemon没能启动。systemctl并不是不能使用。将CMD或者entrypoint设置为/usr/sbin/init即可。docker容器会自动将dbus等服务启动起来。

docker run -it --privileged --name centos7.7 08d05d1d5859 /usr/sbin/init

关闭xshell连接 重新建立对话

docker container exec -it centos7.7 /bin/bash

9.镜像制作

安装openssh

yum install openssh-server –y

systemctl start sshd   systemctl enable sshd

为容器设置root密码 passwd

在宿主机查看docker container top centos7.7

 

基于上面的本地yum源和sshd制作镜像

docker commit centos7.7 xf/centos7.7_sshd

 

步骤整理

1. 启动基础镜像容器 eg:centos7

2. 优化Yum源和安装所需要的软件包并启动测试

3. 镜像制作 docker commit

4. 基于新镜像启动容器实现,xxxx系统+xxx软件服务的功能

第四步eg: docker container run -d --name=sshd_2222 -p 2222:22 08d05d1d5859 /usr/sbin/sshd -D 注:绿色处为设置启动容器即开启sshd服务

:centos6在/etc/init.d/有初始化脚本,centos7没有可以采用以下或上面的方式

mkdir /var/run/sshd

echo 'UseDNS no' >> /etc/ssh/sshd_config

sed -i -e 'pam_loginuid.so/d' /etc/pam.d/sshd

echo 'root:123456' | chpasswd

/usr/bin/ssh-keygen –A

10.通过Dockerfile定制企业镜像

dockerfile命令补充

https://www.cnblogs.com/yanh0606/p/11360936.html

10.1 dockerfile的基本使用初体验(centos7_sshd)

mkdir -p /opt/dockerfile

cd /opt/dockerfile

mkdir centos7_sshd

vim dockerfile  添加以下文件

# 设置基本的镜像,后续命令都以这个镜像为基础

FROM centos:centos7

# 作者信息

MAINTAINER XF

# RUN命令会在上面指定的镜像里执行任何命令

RUN yum install passwd openssl openssh-server -y

RUN echo '123456' | passwd --stdin root

RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd

RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

# 暴露ssh端口22

EXPOSE 22

# 设定运行镜像时的默认命令:输出ip,并以daemon方式启动sshd

CMD ip addr ls eth0 | awk '{print $2}' | egrep -o '([0-9]+\.){3}[0-9]+';/usr/sbin/sshd –D

构建镜像docker image build -t "centos7-sshdv1.0" .

查看构建镜像 docker images ls

运行容器docker run -d --name "xf_centos7_sshd_v1.0" -p 2201:22 centos7-sshdv1.0

查看容器 docker container ls

终端登录验证ssh root@X.X.X.X -p 2201

11.Docker构建私有registry

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry

修改配置文件  vim /etc/docker/daemon.json 加入以下内容 注意逗号

,

"insecure-registries": ["192.168.85.22:5000"]

重启 systemctl restart docker

打标签 docker tag nginx:latest 192.168.85.22:5000/xf/nginx:v1

docker image ls

上传 docker push 192.168.85.22:5000/xf/nginx:v1

 

测试  打开测试服务器→修改配置文件→pull镜像

docker pull 192.168.85.22:5000/xf/nginx:v1

docker image ls

 

12.本地仓库加安全认证

12.1在构建私有仓库的服务器生成密码

yum install httpd-tools -y

mkdir -p /opt/registry-auth/

htpasswd -Bbn xf zy2014810 > /opt/registry-auth/htpasswd

12.2重新启动带有密钥功能的registry容器

docker rm -f `docker ps -aq` #删除之前的容器

docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

12.3push镜像,需要进行login

docker tag centos:6.9 192.168.85.22:5000/xf/centos:v1

docker image ls

docker push 192.168.85.22:5000/xf/centos:v1  #发现没有权限

docker login 192.168.85.22:5000  #输入用户名和密码

docker push 192.168.85.22:5000/xf/centos:v1  #再次push

测试  打开测试服务器→修改配置文件→pull镜像

docker pull 192.168.85.22:5000/xf/centos:v1

 

13 habor实现图形化register

13.1安装dockerdocker-compose

yum install -y docker-compose

测试    docker-compose –version

https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz

13.2下载并上传至/opt再解压缩

 

tar -xzf harbor-offline-installer-v1.10.2.tgz

13.3进入解压缩后的文件夹修改vim harbor.yml配置文件

 

注:如有报错注释掉和https有关的,有些博客配置密钥证书(暂不知是否和其有关系)

13.4执行install.sh

./install.sh

输入IP即可访问

 

账号:admin 密码:zy2014810

 

13.5修改节点的docker配置文件vim /etc/docker/daemon.json再重启守护进程和docker,使用192.168.85.22即可访问harbor仓库,默认80端口。

{

  "registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"],

  "insecure-registries": ["192.168.85.22:5000","192.168.85.22"],

  "live-restore": true

}

systemctl daemon-reload

systemctl restart docker

13.6新建项目



 

13.7测试制作镜像并上传

docker tag centos:6.9 192.168.85.22/xf/centos:v1

docker login 192.168.85.22        #此处的账号是harbor admin   zy2014810

docker push 192.168.85.22/xf/centos:v1

13.8 再次查看

 

 

13.9harbor启动停止 cd /opt/harbor

#启动docker-compose start

#停止docker-compose stop   #重启docker-compose restart


14.其他节点如果想使用(即从私人仓库pull镜像),修改节点的docker配置文件vim /etc/docker/daemon.json再重启守护进程和docker即可

{

  "registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"],

  "insecure-registries": ["192.168.85.22:5000","192.168.85.22"],

  "live-restore": true

}

systemctl daemon-reload

systemctl restart docker   #节点之前也要注意hosts解析 

14.1从节点Pull habor中的镜像

docker push 192.168.85.22/xf/centos:v1

 

15.Docker本地网络类型

docker network ls

none : 无网络模式

bridge : 默认模式,相当于NAT

host : 公用宿主机Network NameSapce

container:与其他容器公用Network Namespace

 

16.Docker跨主机网络介绍

macvlan

overlay

16.1Docker跨主机访问-macvlan实现

docker network create --driver macvlan --subnet=192.168.85.0/24 --gateway=192.168.85.2 -o parent=eth0 macvlan_1

 

ip link set eth0 promsic on (ubuntu或其他版本需要)

 

docker run -it --network macvlan_1 --ip=192.168.85.88 centos6.9  /bin/bash

 

docker run -it --network macvlan_1 --ip=192.168.85.99 centos:6.9  /bin/bash

17. Docker 跨主机访问-overlay实现

17.1启动 consul 服务,实现网络的统一配置管理

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

分别在各台主机加入配置文件 vim  /etc/docker/daemon.json

{

  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],

  "cluster-store": "consul://192.168.85.22:8500",

  "cluster-advertise": "192.168.85.22:2376"

}

 




转载请标明出处【docker容器学习笔记】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论