Ubuntu16.04
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
容器由两部分组成:
容器在 Host 操作系统的用户空间中运行,与操作系统的其他进程隔离。
sudo apt-get update
sudo dpkg --configure -a
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
docker --version
由于下载速度很慢建议去https://www.daocloud.io/mirror配置镜像之后重启docker服务再下载
sudo docker run hello-world
sudo docker run -d -p 80:80 httpd
可以使用docker --help
# 启动docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重启docker
sudo service docker restart
# 列出镜像
docker image ls
# 拉取镜像
docker image pull library/hello-world
# 删除镜像
docker image rm 镜像id/镜像ID
# 创建容器
docker run [选项参数] 镜像名 [命令]
# 停止一个已经在运行的容器
docker container stop 容器名或容器id
# 启动一个已经停止的容器
docker container start 容器名或容器id
# kill掉一个已经在运行的容器
docker container kill 容器名或容器id
# 删除容器
docker container rm 容器名或容器id
sudo docker pull mysql:5.7
查看镜像
sudo docker images
–Repository: mysql
–Tag: 5.7
–Image ID: 1e4405fe1ea9
–官方仓库: https://hub.docker.com/_/mysql/
–格式:https://registry/user/repo
–仓库中保存若干版本镜像,每个镜像对应一个 tag, 默认的 tag 是 lastest
–每个镜像有 github 上 Dockfile 生成
–https://github.com/docker-library/mysql/blob/master/5.7/Dockerfile
–FROM base_image
–RUN shell_commands
–ENV env_vars
–VOLUME path
–COPY source destination
–ENTRYPOINT [“executable”,”parm1”, ”parm2”,…]
–EXPOSE ports
–CMD [“executable”,”parm1”, *”*parm2”,…]
mkdir mydock && cd mydock
gedit dockerfile
–录入以下内容
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
-构建镜像
sudo docker build . -t hello
–运行镜像
sudo docker run -it --rm hello -H
此处可开启另外一个终端
–启动服务器
sudo docker run -p 3310:3310 --name mysql3 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
查看容器
sudo docker ps
–启动 MySQL 客户端
sudo docker run -it --net host mysql:5.7 "sh"
sudo mysql -h127.0.0.1 -P3310 -uroot -proot
• https://blog.csdn.net/pmlpml/article/details/78602290
此处可开启另外一个终端
–数据库文件在哪里?
sudo docker exec -it mysql2 bash
ls /var/lib/mysql
–Dockerfile 的 VOLUME /var/lib/mysql 的含义
sudo docker container prune -f
sudo docker volume prune –f
sudo docker volume ls
每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置
这个卷在主机(host)的 /var/lib/docker/volumes/ 目录下
sudo docker rm $(docker ps -a -q) -f -v
sudo docker volume create mydb
sudo docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
sudo docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
env
mysql -hmysql -P3306 -uroot -proot
–注意:这里使用了 --link 连接两个容器
–客户端容器内可以使用 mysql 这个别名访问服务器
-安装dockercompose
安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
-查看是否安装成功
-编写stack.yml
mkdir comptest && cd comptest
内容:
version: '3.1'
services:
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
-启动服务
sudo docker-compose -f stack.yml up
备制支持 ifconfig 和 ping 命令的 ubuntu 容器
docker run --name unet -it --rm ubuntu bash
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
ifconfig
启动另一个命令窗口,由容器制作镜像
sudo docker commit unet ubuntu:net
创建自定义网络
sudo docker network create mynet
在两个窗口创建 u1,u2 容器网络,并使用以下命令
~]# sudo docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
~]# sudo docker run --name u2 --net mynet -it --rm ubuntu:net bash
~]# sudo docker info u1
~]# sudo docker network connect bridge u1
~]# sudo docker network disconnect mynet u1
检查docker的状态
sudo docker info
sudo docker info --format {{.ServerVersion}}
–Docker top
加上容器的id就可以查看容器内进程
容器详细信息
sudo docker inspect
容器日志查看
sudo docker log
+容器id
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
容器化是革命性的技术,涉及 cncf 技术框架的方方面面,在一台PC上一键部署服务集群成为现实,使得 DevOps 以及 CI/CD 易于实施,使得分布式系统测试与研究更加高效。
容器即服务,为云服务计算提供基石
所谓云原生技术,即是将容器部署于服务器集群的技术