docker入门

发布于:2022-11-09 ⋅ 阅读:(7) ⋅ 点赞:(0) ⋅ 评论:(0)

以下centos7环境下安装,ubuntu见底部

开启linux内核流量转发


cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF

加载修改内核的参数,配置文件,按下列命令顺序进行

[root@localhost ~]# modprobe br_netfilter
[root@localhost ~]# sysctl -p /etc/sysctl.d/docker.conf

卸载旧版本,如果是新机器可以忽略这一步,因为centos还没自带docker服务。

[root@localhost ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotatedocker-selinux docker-engine-selinux docker-engine

安装依赖

[root@localhost ~]#  yum install -y yum-utils device-mapper-persistent-data lvm2

添加docker源

[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

[root@localhost ~]# yum install docker-ce

查看docker版本

[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

配置docker加速器

[root@localhost ~]# mkdir -p /etc/docker

[root@localhost ~]# touch /etc/docker/daemon.json

[root@localhost ~]# vim /etc/docker/daemon.json

#加入如下内容
{
    "registry-mirrors" : [ "https://8xpk5wnt.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"] 
}

#重启docker
[root@localhost ~]# systemctl daemon-reload && systemctl restart docker

 基础命令

1、启动docker:# systemctl start docker
2、停止docker:# systemctl stop docker
3、查看docker状态:# systemctl status docker
4、开机自启动:# systemctl enable docker
5、取消开机自启动:# systemctl disable docker

docker pull 【tag】下载

例:[root@localhost ~]#  docker pull mysql

指定版本下载

docker pull mysql:5.7 #指定版本必须是存在的

docker rmi 删除镜像

[root@localhost ~]# docker rmi -f (image id)或者(repository)

[root@localhost ~]# docker rmi -f $(docker images -aq)  #递归删除

[root@localhost ~]# docker rmi -f 容器id 容器id 容器id  #指的是删除多个容器

容器命令

先要具备容器命令先下载相应的镜像

[root@localhost ~]# docker pull ubuntu下载

新建容器完毕后

运行:

docker run [可选参数] image

#参数说明

--name="name" 容器的名字,我们自己取的名字

-d 后台方式运行

-it 使用交互方式运行

-p 指定容器的端口 -p 8080

-p 主机端口:容器端口 (常用端口)

-p 容器端口

-P 随机指定端口

测试:

[root@localhost ~]# docker run -it ubuntu /bin/bash
root@21f091ee1810:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@21f091ee1810:/# exit
exit
[root@localhost ~]# 

docker ps 查看当正在运行的容器

docker ps -a 查看曾经运行过的容器随带显示历史运行的容器

docker ps -aq    #-q 只显示容器的编号

退出容器

exit #直接退出容器并停止

ctrl+p+q 退出容器但不停止

删除容器

docker rm 容器id #删除指定的容器【不能删除正在运行的容器】

docker rm -f $(docker ps -aq) #删除所有的容器

启动和停止容器的操作

docker start 容器id #启动容器

decker restart 容器id #重新启动容器

docker stop 容器id #停止正在运行的容器

docker skill 容器id #强制停止当前容器

后台启动 -d

[root@localhost ~]# docker run -d ubuntu 
3c726a0bc6eea3545ac36b0861e102d9f5ff85a208fa712d8e3176605a691e86
[root@localhost ~]# 

进入启动的容器

[root@localhost ~]# docker exec -it 371b2ae61a39  /bin/bash
root@371b2ae61a39:/# 


[root@localhost ~]# docker attach 371b2ae61a39
root@371b2ae61a39:/etc# 

#docker attach 371b2ae61a39   进入容器正在执行的终端,不会启动新的终端
#docker exec -it 371b2ae61a39 /bin/bash 进入容器后打开一个新的终端,可以在容器内操作
docker cp 容器id:容器内路径 目的的主机路径
[root@localhost ~]# docker cp 371b2ae61a39:/mnt/learn.txt /mnt/
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
learn.txt

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

[root@localhost mnt]# docker export 371b2ae61a39 >ubuntu.tar
[root@localhost mnt]# ls
learn.txt  ubuntu.tar

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

[root@localhost mnt]# cat /mnt/ubuntu.tar | docker import - test/ubuntu:v1
sha256:44ab2da020dda5927104a8a5ca3b60dd33e018805493b5e544afd2775a237bf4
[root@localhost mnt]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
test/ubuntu   v1        44ab2da020dd   20 seconds ago   72.8MB

 导出镜像 docker save 

docker save -o a.tar centos:latest

将centos.tar.gz和nginx.tar.gz镜像包解压到/root/目录

docker load -i /root/centos.tar.gz

docker load -i /root/nginx.tar.gz

在docker 0.6版以后,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部物理机的一个普通用户权限。
使用privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。

扩展: 测试privileged 特权功能   可以:1

1. 未设置privileged启动的容器:

[root@localhost ~]# docker run -it  centos:latest bash

[root@65acccbba42f /]# ls /dev  #可以看到的设备文件比较少

console  fd  full  fuse  kcore  null  ptmx  pts  random  shm  stderr  stdin  stdout  tty  urandom  zero

[root@00931099722f /]# mount -o bind /etc /opt/   #不可以挂载成功, mount命令执行失败

mount: permission denied

2. 使用privileged启动的容器

[root@xuegod63 ~]# docker run -it --privileged centos:latest bash

[root@4a51d0fde3ce /]# ls /dev/   #可以看到很多设备文件

[root@4a51d0fde3ce /]# mount -o bind /etc /opt/  #可以挂载成功

[root@4a51d0fde3ce /]# mount /dev/sda1 /opt/  #可以挂载物理机上的sda1分区

[root@4a51d0fde3ce /]# ls /opt/

[root@4a51d0fde3ce /]# init 0   #不能使用init 0关机不行,还是使用exit退出docker

Couldn't find an alternative telinit implementation to spawn.

[root@4a51d0fde3ce /]# exit

例 docker安Nginx

1.拉取镜像

[root@localhost mnt]# docker pull nginx

查看拉取

 运行容器

[root@localhost mnt]# docker run -itd --name learnnginx -p 80:80 nginx 
31be408acbafd65cd7d3fcf9cdfb94d237c506233c5ac878a339c37d7b8403d2

访问nginx服务

ubuntu安装


#使用官方安装脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh

#卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc