设置开机自启
在使用docker run启动容器时,使用--restart参数来设置
例:# docker run -d --name mysql -p 3306:3306 --restart=always -v /var/lib/mysql:/var/lib/mysql -v /etc/localtime:/etc/localtime 39.106.193.240:9100/joss/mysql:5.7
always - 无论退出状态是如何,都重启容器
如果创建时未指定 --restart=always ,可通过update 命令设置
命令:docker update --restart=always 容器ID 例:docker update --restart=always 9bb3df5a70bf
命名空间
进程命名空间
IPC 命名空间
网络命名空间
挂载命名空间
UTS 命名空间
用户命名空间
网络模式
1. host模式 容器和宿主机共享Network namespace。
2. container模式 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
3. none模式 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP
4. bridge模式
Docker容器有几种状态
答:有四种状态:运行、已暂停、重新启动、已退出
Dockerfile中最常见的指令是什么?
FROM:指定基础镜像;
LABEL:功能是为镜像指定标签;
RUN:运行指定的命令;
CMD:容器启动时要运行的命令
1.1 Dockerfile中的命令COPY和ADD命令有什么区别?
答:一般而言,虽然ADD并且COPY在功能上类似,但是首选COPY。
那是因为它比ADD更易懂。COPY仅支持将本地文件复制到容器中,而ADD具有一些功能(如仅限本地的tar提取和远程URL支持),这些功能并不是很明显。因此,ADD的最佳用途是将本地tar文件自动提取到镜像中,如ADD rootfs.tar.xz /。
为什么docker比vm快
(1)docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
harbor http 报错
由于是http
[root@onlyoffice-192e168e6e156 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["harbor.base.dc:80"] 把http去掉
}
设置网卡为桥接模式
yum -y install bridge-utils
[root@linux-node2 ~]# systemctl stop docker
[root@linux-node2 ~]# ifconfig docker0 down
[root@linux-node2 ~]# brctl delbr docker0
[root@linux-node2 network-scripts]# cat ifcfg-br0
DEVICE=br0
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
TYPE=Bridge
IPADDR=192.168.56.12
NETMASK=255.255.255.0
GATEWAY=192.168.56.2
[root@linux-node2 network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
[root@linux-node2 network-scripts]#
systemctl restart network [root@linux-node2 network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
link/ether 00:0c:29:ac:7e:6d brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:feac:7e6d/64 scope link
valid_lft forever preferred_lft forever
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:ac:7e:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.56.12/24 brd 192.168.56.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feac:7e6d/64 scope link
valid_lft forever preferred_lft forever[root@linux-node2 network-scripts]#
vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -b=br0'
systemctl restart network
pipework的安装wget https://github.com/jpetazzo/pipework/archive/master.zip
unzip master.zipcp pipework-master/pipework /usr/local/bin/chmod +x /usr/local/bin/pipework
这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突
docker run -itd --net=none --name=test centos7 /bin/bash
为test容器设置一个与桥接物理网络同地址段的ip@网关
pipework br0 test 192.168.56.11/24@192.168.56.2