docker基础之docker命令

安装Docker

安装Docker
sudo curl -sSL https://get.docker.com/ | sh

为当前用户赋权
sudo usermod -a -G docker $USER

注销再登陆
docker version
docker images

安装docker-compose
sudo apt-get -y install docker-compose

----------------------------------------------------

快速启动映像范例
docker run -d -p 80:80 yeasy/simple-web
docker run -d -p 8000:80 tutum/wordpress
docker run -d -p 2048:80 alexwhen/docker-2048
docker run -d -p 8080:80 dorowu/ubuntu-desktop-lxde-vnc

有趣的映像
sudo docker run -d \
--name aria2-with-webui \
-p 6800:6800 \
-p 6880:80 \
-p 6888:8080 \
-v /DOWNLOAD_DIR:/data \
-v /CONFIG_DIR:/conf \
-e SECRET=12345678 \
xujinkai/aria2-with-webui

docker run -d -p 1024:80 owncloud

-----------------------------------------------------
docker 基本命令

Docker Pull
Docker Run
Docker ps
Docker Stats
Docker stop
Docker Start
Docker Rm

###############
nulige@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f6a1ead5860 dorowu/ubuntu-desktop-lxde-vnc "/startup.sh" 33 minutes ago Up 33 minutes (healthy) 0.0.0.0:8080->80/tcp infallible_jackson
d15c3e859201 tutum/wordpress "/run.sh" 43 minutes ago Up 43 minutes 3306/tcp, 0.0.0.0:8000->80/tcp wonderful_feynman
4ddae03a591e yeasy/simple-web "/bin/sh -c 'python …" About an hour ago Up About an hour 0.0.0.0:80->80/tcp agitated_shockley
b8c76c6bf014 alexwhen/docker-2048 "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:2048->80/tcp nostalgic_easley

#查看容器占多少内存
nulige@ubuntu:~$ docker top 1f6a1ead5860

#关闭容器
docker stop d15c3e859201

#启动容器
nulige@ubuntu:~$ docker start d15c3e859201
d15c3e859201

#查看所有容器
nulige@ubuntu:~$ docker ps -a -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
1f6a1ead5860 dorowu/ubuntu-desktop-lxde-vnc "/startup.sh" 36 minutes ago Up 36 minutes (healthy) 0.0.0.0:8080->80
d15c3e859201 tutum/wordpress "/run.sh" About an hour ago Exited (137) About a minute ago
4ddae03a591e yeasy/simple-web "/bin/sh -c 'python …" About an hour ago Up About an hour 0.0.0.0:80->80/t
b8c76c6bf014 alexwhen/docker-2048 "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:2048->

#查找镜像
nulige@ubuntu:~$ docker search ***

#安装网站
nulige@ubuntu:~$ docker run -d --name myhttpd -p 80:80 httpd
访问:
http://192.168.56.15/


清理所有正在运行的容器(慎用)
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

删除所有docker images

[root@harbor ~]# docker rmi $(docker images -q)

------------------------------------------------------
映像交互式操作

运行httpd容器
docker run -d --name myhttpd -p 80:80 httpd

列出当前映像
docker images


查看httpd映像历史
docker image history httpd

针对httpd映像执行交互式操作
docker exec -it myhttpd bash

在httpd映像内部安装nano
apt-get update && apt-get install -y nano

使用nano修改index文件
nano /htdocs/index.html

root@a40c7c6c0be5:/usr/local/apache2# cd htdocs
root@a40c7c6c0be5:/usr/local/apache2/htdocs# dir
index.html

#修改文件
nano index.html
it does work!

#提交映像
nulige@ubuntu:~$ docker commit myhttpd httpdnew
sha256:36683bacf96ba7beabb7a800c960bb0bf665ef986e0ada473587b3a5b36af4ff

nulige@ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a40c7c6c0be5 httpd "httpd-foreground" 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp myhttpd

nulige@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpdnew latest 36683bacf96b 14 seconds ago 149MB
dorowu/ubuntu-desktop-lxde-vnc latest 64317909d597 35 hours ago 1.11GB
httpd latest d4a07e6ce470 3 weeks ago 132MB
xujinkai/aria2-with-webui latest 2733e342944c 6 weeks ago 23.9MB
owncloud latest 327bd201c5fb 3 months ago 618MB
yeasy/simple-web latest 172c78152bf6 12 months ago 679MB
tutum/wordpress latest 7e7f97a602ff 3 years ago 477MB
alexwhen/docker-2048 latest 7929bcd70e47 3 years ago 8.02MB


提交映像
docker commit myhttpd httpdnew

查看httpdnew映像历史
docker image history httpdnew

使用httpdnew创建容器观察结果
docker run -d -p 81:80 httpdnew

清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

--------------------------------------
Dockerfile实验


创建httpd实验文件夹
mkdir httpd

进入到实验文件夹
cd httpd

创建index文件
nano index.html
<html><body><h1>Today Is Very Happy!</h1></body></html>

创建Dockerfile文件
nano Dockerfile

# Simple Dockerfile for httpd


FROM httpd

MAINTAINER Abraham Cheng

# Bundle app source

COPY . /usr/local/apache2/htdocs

#ctrl +O

构建映像
docker build -t myhttpd .

运行容器查看效果
docker run -d -p 80:80 myhttpd

查看映像id
docker history image id

登陆到docker hub并推送映像
Docker login

给新映像打tag
docker tag myhttpd chengzh/httpd

推送映像到docker hub
docker push chengzh/httpd

如果要演示手工ci\cd,则需要
1. 修改index.html
2. 重新打标签
3. 再次推送


清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

-------------------------------------------------
使用docker compose部署多容器应用

安装docker-compose
sudo apt-get -y install docker-compose

创建docker-compose文件
nano docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:

  

#备注:version: '3.3' 16.04版本改成'2.0'

运行docker-compose
docker-compose up -d

#查看映射的端口
nulige@ubuntu:~/docker-compose$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d9ed8d66f7 wordpress:latest "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 0.0.0.0:8000->80/tcp dockercompose_wordpress_1
ea6ba796836b mysql:5.7 "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 3306/tcp, 33060/tcp dockercompose_db_1

#访问:
http://192.168.56.15:8000


查看容器列表
docker ls

查看映像列表
dockers images

停止容器
docker-compose down

#加volumes,可以删除持久化参数(就是配置网站后,网站中的数据)
docker-compose down --volumes

#查看本机的卷
#docker volume ls
nulige@ubuntu:~/docker-compose$ docker volume ls
DRIVER VOLUME NAME
local 538f96cddb6a9478087a9894636e794ac054c20e4da3b5a2f10719b794a49a95
local 5915d2a527022d3992f50fe2c779c1eebf5fb59fae2d4146b4ed2790aa07a1a4
local a03fc37e67d8ed0e91593fcb151c36e1257d741a7d7818920cd5361414ec9810
local dockercompose_db_data #查看这个卷
local f6e0e2601724e4d684c01225e1702234b0000c4a6fb00164b2b82fec11c90f4b


#数据存持久化持久(查看详细的卷信息)
docker volume inspect chengzh_db_data

nulige@ubuntu:~/docker-compose$ docker volume inspect dockercompose_db_data
[
{
"CreatedAt": "2019-04-25T15:11:13+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/dockercompose_db_data/_data",
"Name": "dockercompose_db_data",
"Options": null,
"Scope": "local"
}
]

---------------------------------------------
数据卷操作

bind mount: 是将 host 上已存在的目录或文件 mount 到容器。

mkdir http

cd http

nano index.html

<html><body><h1>Go West!</h1></body></html>

#指定目录挂载卷
docker run -d -p 80:80 -v /home/chengzh/http:/usr/local/apache2/htdocs httpd

#不指定目录挂载卷
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了。
docker run -d -p 81:80 -v /usr/local/apache2/htdocs httpd

docker inspect container id

注意mounts字段的source目录

ls source dir

nano source dir/index.html

修改下,刷新页面看结果

docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

------------------------------------------------------
网络实验

在宿主机上列出所有的网络类型
docker network ls

docker inspect network bridge

在宿主机上观察bridge 网络,注意观察veth
sudo apt install bridge-utils -y

nulige@ubuntu:~/docker-compose$ brctl show
bridge name bridge id STP enabled interfaces
br-e0261c85f296 8000.024200ebef23 no veth5debc9e
vethfcda45e
docker0 8000.02426f41769f no

创建httpd容器

docker run -d --name httpd1 httpd

在虚机里观察eth0
docker exec -it httpd1 bash

ip a

在宿主机上观察bridge 网络,注意观察veth
docker inspect network bridge

brctl show

创建第二个httpd容器
docker run -d --name httpd2 httpd

在宿主机上观察bridge 网络,注意观察veth
brctl show

查看容器和宿主机的vnet pair
宿主机上执行
Ip link

容器
docker exec -it httpd2 bash

cat /sys/class/net/eth0/iflink

---------------------------------------------
创建自定义网络
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 mynetwork

检查mynetwork配置
docker network inspect mynetwork

创建容器使用新建的自定义网络

docker run -d -p 83:80 --network=mynetwork httpd

检查容器ip地址
ip a

为前述httpd容器创建第二块网卡使其连接到mynetwork
docker network connect mynetwork container id

检查双网卡httpd容器的网络设置

docker container inspect container id

检查 httpd的网络配置
docker exec -it container id bash
ip a

ping 172.22.16.3


docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

docker network rm mynetwork

------------------------------------------------------
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

------------------------------------------------------
内存分配限制

合理分配,循环释放测试(运行压力测试工具,压测内存,最大压到280M)
docker run -it -m 300M progrium/stress --vm 1 --vm-bytes 280M


反面例子(运行压力测试工具,压测内存,最大压到310M,超过容器的上限,会删除掉容器)
docker run -it -m 300M progrium/stress --vm 1 --vm-bytes 310M


docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)


清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)


----------------------------------------------------
CPU分配限制

创建两个不同优先级的容器,根据宿主机cpu数量设置参数
docker run --name containerA -d -c 1024 progrium/stress --cpu 1
docker run --name containerB -d -c 512 progrium/stress --cpu 1

1024指的是:60.67,按比例进行分配。
CPU:250m (指的是CPU的四分之一,=0.4个CPU)


检查两个容器的cpu使用情况
docker stats

关闭容器A,再检查cpu使用情况
docker stats

清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)

#限制容器资源

 

posted @ 2019-04-25 22:29  努力哥  阅读(269)  评论(0)    收藏  举报