Docker 安装卸载及常用命令

Docker安装卸载及常用命令

官方手册请点击 > 官方安装手册

学习请点击 > 理论知识 

CentOS 7.6.1810 安装步骤如下:

 1   $ sudo yum install -y yum-utils \     # 安装依赖
 2   device-mapper-persistent-data \
 3   lvm2
 4   
 5    $ sudo yum-config-manager \         # 安装配置管理
 6   --add-repo \
 7   https://download.docker.com/linux/centos/docker-ce.repo
 8 
 9   $ sudo yum-config-manager --enable docker-ce-nightly
10   $ sudo yum-config-manager --enable docker-ce-test
11 
12   $ sudo yum install docker-ce docker-ce-cli containerd.io
13 
14   $ sudo systemctl start docker       # 启动docker
15   $ sudo systemctl status docker       # 查看docker状态
16   $ sudo docker run hello-world        # 运行hello-world
17   $ sudo docker images hello-world
18 
19   $ sudo docker run hello-world       # 使用hello-world测试安装是否成功
20 
21   $ sudo systemctl enable docker        # 开机启动

 卸载docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
           docker-ce
$ sudo rm -rf /var/lib/docker

 

docker常用指令

最常用的docker客户端:docker,也可通过REST API与服务器通信;

安装compose(Docker-Compose是一个可以自动化的脚本工具。)

 

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

vim docker-compose.yml
wordpress:
    image: wordpress
    ports:
        - "8022:80"
    environment:
        WORDPRESS_DB_PASSWORD: <passwd>
    links:
        - wordpress_mysql:mysql
    container_name: wordpress_wordpress
 
wordpress_mysql:
    image: mysql
    environment:
        MYSQL_ROOT_PASSWORD: <passwd>
    container_name: wordpress_mysql
 
docker-compose -f docker-compose.yml up -d

 

 systemctl status docker.service                       # 查看docker状态
systemctl daemon-reload                          # 重启docker daemon
systemctl restart docker.service                 # 重启docker服务
docker -H 192.168.1.2 info                       # -H参数可与远程服务器通信 vim /etc/systemd/system/multi-user.target.wants/docker.service   # 默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求;允许远程客户端请求,需要在配置文件中打开 TCP 监听

ExecStart/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0
docker run -d -p 80:80 httpd        # 启动 httpd 容器,并将容器的80端口映射到 host 的80端口
docker run -d -p 8080:80 httpd       # 8080是host端口,80是images端口
docker images                   # 查看下载到本地的镜像
docker images httpd              # 查看httpd镜像信息
docker ps 或者 docker container ls       # 显示当前运行容器

CLI或API启动、停止、移动或删除容器

docker pull                         # 从Registry下载镜像
docker pull hello-world                # 用来验证docker是否安装成功
docker pull centos                   # 下载centos base镜像
docker images centos                  # 查看镜像信息
docker run                             # 下载镜像并启动容器
docker run hello-world                           # 运行hello-world
docker run centos pwd                     # 直接运行命令
docker run -it centos                    # 启动并进入 CentOS 容器(互动模式)
docker run haproxy                       # 可研究负载均衡软件HAProxy
docker run django                        # 学习使用django开发python web应用
docker run -it centos                    # 运行容器。(-it以交互模式进入容器)
docker run -it 22d31cc52b3e                 # 对镜像进行调试
docker run centos-nmap:v1.0 yum install -y nmap  # 为镜像安装nmap
docker start ContainerID                  # 启动容器
docker ps                           # 查看运行的容器,并获得names
docker commit names mycentos              # 创建为新镜像(官方不建议)
docker run -tdi --privileged centos init       # 其中centos为镜像,不是名称
docker build -t centos-vi.                 # 创建新镜像,官方推荐,-t命名,命令末尾的.指明build context为当前目录。
docker build --no-cache -t mycentos          # 构建镜像时不使用缓存
docker history mycentos                  # 显示镜像的构建历史
docker rmi debian:tag                    # 删除host中的镜像,只有最后一个tag被删除才真被删除
docker rm containerID                    # 删除container
docker search httpd                      # 搜索hub中的镜像
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q )  # 查询依赖
docker ps -a                          # 查看所有Container
docker tag mycentos mycentos:0.0.1            # 给镜像打tag
docker login -u 13366969672                # 登录docker hub
docker tag httpd 13366969672/httpd            # 修改镜像的registry
docker push 13366969672/httpd               # 上传镜像至docker hub

搭建本地registry说明,请点击我

docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2  # 运行自己的registry
docker tag 133/httpd:v0.1 hostname:5000/133/httpd:v0.1            # 重命名镜像使之与registry匹配
docker push hostname:5000/133/httpd:v0.1                     # 上传镜像至本地registry
docker pull hostname:5000/133/httpd:v0.1                      # 从本地registry下载镜像
docker images hostname:5000/133/httpd:v0.1                   # 查看镜像

registry安全传输https特性:请点击我 

docker run -d centos /bin/bash -c "while true; do sleep 1;done"      # 后台长期运行容器
docker stop fe39cc2ccc8b                                # 停止一个容器
docker run --name "my_http_server" -d httpd                   # 启动容器并命名为my_http_server,-d为后台运行
docker run -d centos /bin/bash -c "while true; do sleep 1; echo I_am_in_container;done" # 获取长ID
docker attach 长ID                                            # 进入容器命令终端,ctrl +p or +q退出
docker exec -it ID bash                                         # 进入容器命令终端
docker exec -it <container> bash|sh                                  # 常用格式,exit退出
docker logs -f ID                                               # 查看启动命令的输出
docker (start stop kill restart pause) ContainerID                        # 启动、停止、杀死、重启、暂停容器
docker stop $(docker ps -a -q)                                       # 停止所有container
docker rm $(docker ps -a -q)                                           # 删除所有container
docker rm -v $(docker ps -aq -f status=exited)                            # 删除所有退出的container
docker rmi $(docker images -q)                                       # 删除所有images
docker run -d --restart=always httpd                                    # 重启容器,stop或kill的不重启
docker run -d --restart=failure:3 httpd                                  # 重启容器最多3次
docker pause names                                              # 暂停容器
docker unpause names                                             # 恢复运行

 

docker create                                  # container处于created状态
docker start                                  # 后台启动容器
docker run                                    # 是create和start的组合

 

docker run -m 200M --memory-swap=300M centos                        # 设置内存+swap进行限额,默认没有限制;只有内存,没有内存+swap时,默认后者是两倍
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M  # images对容器进行压力测试

 

docker run --name "container_A" -c 1024 centos                 # 设置CPU share
docker run --name container_A -it -c 1024 progrium/stress --cpu 1
docker run --name container_B -it -c 512 progrium/stress --cpu 1      # 进行压力测试,使用top查看

 

docker run -it --name container_A --blkio-weight 600 centos
docker run -it --name container_B --blkio-weight 300 centos         # 设置blkio-weight,默认500,磁盘的读写带宽

bps 是 byte per second,每秒读写的数据量。iops 是 io per second,每秒 IO 的次数
docker run -it --device-write-bps /dev/sda:30M centos            # 限制容器/dev/sda的速率为30M/s
time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct        # 测试硬盘读写

 

cgroup 实现资源限额, namespace 实现资源隔离( 六种资源:Mount、UTS、IPC、PID、Network 和 User )

docker run -it --cpu-shares 512 progrium/stress -c 1
docker ps                              # 查看短ID
ls /sys/fs/cgroup/cpu/docker/短ID Tab             # 查看cpu.shares设置
/sys/fs/cgroup/memory/docker/短ID Tab
/sys/fs/cgroup/blkio/docker/短ID Tab

 

docker run -h myhost -it centos                # 设置容器的主机名

 

docker network ls                   # 查看docker网络
docker run -it --network=none centos      # 容器指定使用none网络(什么都没有的网络)
docker run -it --network=host centos      # 指定host网络,配置与主机完全一致,使用ip l
yum install bridge-utils             # 安装brctl
brctl show                      # 查看网桥
docker network inspect bridge          # 查看网桥配置信息

 

user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 
docker network create --driver bridge my_net                              # 创建默认的bridge网络
docker network inspect my_net                                        # 查看刚创建网桥
docker network create --driver bridge --subnet 10.113.0.0/24 --gateway 10.113.0.1 my_net   # 为自己创建的网桥指定网段,只有使用 --subnet 创建的网络才能指定静态 IP
docker run -it --network=my_net centos                                 # 使用新的网络
docker run -it --network=my_net --ip 10.113.0.2 centos                       # 配置静态ip地址
ip r                                                       # 查看路由信息
sysctl net.ipv4.ip_forward                                         # 查看转发是否启用,1为启用
iptables-save                                                 # 查看防火墙
docker network connect my_net centos短ID                                # 为centos添加一块my_net网卡

 

docker run -it --network=my_net2 --name=bbox1 busybox
docker run -it --network=my_net2 --name=bbox2 busybox                        # 为容器命名,并实现网络通
docker DNS 有个限制:只能在 user-defined 网络中使用

docker run -it --network=container:web1 centos                   # 通过--network=container:web1 指定 jointed 容器为 web1
dcoker exec -it web1 bash
ip a                                               # 查看web1的网络    35章
joined容器可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间可以通过 127.0.0.1 直接通信
docker run -it --network=container:web1 mycentos                   # 指定用joined容器
iptables -t nat -S                                      # 查看防火墙NAT配置
tcpdump -i docker0 -n icmp                                 # 监控网卡数据包
docker port 8a6d08d05557                                  # 查看端口映射
docker run -d -p 80:80 -v ~/htdocs:/usr/local/apache2/htdocs httpd       # 将$HOME/htdocs mount到容器上
docker inspect containerID                                 # 查看容器信息
docker volume ls                                        # 查询volume name
docker volume inspect 'volume name'                            # 查看volume
docker cp /home/index.html containerID:/usr/local/apache2/htdocs         # 容器与host之间拷贝数据
volume container 是专门为其他容器提供 volume 的容器
docker create --name vc-data /home/jinbian/var/vc-data:/usr/local/httpddata -v /var/useful/vc-data mycentos # 创建volume container
docker inspect vc-data                                                      # 查看volume container
docker run --name web1 -d -p 80 --volumes-from vc-data httpd                              # 容器启动并使用vc-data
docker volume ls                                                          # 查看数据
docker volume rm id                                                        # 删除数据

 

指令导图

Docker 导图学习

 

posted @ 2019-08-01 10:59  让未来到来  阅读(4818)  评论(0编辑  收藏  举报