安装ubuntu
安装docker:
#更新数据源
apt-get update# :安装所需依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common #安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg| sudo apt-key add -#新增数据源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_ release -cs) stable"#更新并安装Docker CE
再更新加速源《https://38b8lbmr.mirror.aliyuncs.com》这个你登陆阿里网站,自己都有一个专属的,直接复制粘贴就行,这个比 vi /etc/docker/daemon.json 再填写快多了
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://38b8lbmr.mirror.aliyuncs.com"]
}
EOF
apt-get install docker-ce docker-ce-cli containerd.io
###################
ufw allow 8080 //开启虚拟机8080端口
使用:
docker images //查看镜像
docker image -ls
docker ps //查看启动的容器
docker ps -a //查看所有容器,包括未启动的
docker logs -f myiot ##查看容器日志
ip -a //可以查看docker的ip与相应运行的容器网络
docker run -p 8080:8080 --name tomcat -d tomcat //启动一个tomcat镜像,就是产生了一个容器,对应端口为 宿主机端口:docker端口 --name为取个别名 -d为以守护进程运行,就不会打印日志到屏幕了 后面的那个tomcat是镜像名称
docker stop 容器名称或者id //通知容器
docker rmi tomcat //删除镜像
docker rm 32cea2bceb9f //删除容器,不能删除正在运行的容器
docker rm -f 32cea2bceb9f //强制删除容器,可以删除正在运行的容器
docker exec -it 32cea2bceb9f /bin/bash //进入到相应的容器内部,可以修改容器中的配置文件
exit //退出容器
docker container prune //删除所有停止的容器
docker volume ls //查看所有数据卷
docker volume rm [volume_name] //删除指定数据卷
docker volume rm $(docker volume ls -qf dangling==true) //删除所有未关联的数据卷
###dockers开启mysql容器
docker run --name min-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19
###自己部署web应用 构建镜像
首先将自己的war或者jar拷贝到虚拟机的/user/local/docker/中,方便操作,
用户的应用一般是在/user/local/中
再:vi Dockerfile
填写一个最简单的:FROM tomcat:latest //相当于继承latest版本的tomcat,latest可以填写其它固定版本
COPY iot.war /usr/local/tomcat/webapps //复制iot.war到docker中的/user/local/tomcat/webapps/目录下去
然后: docker build -t [image_name] . //构建镜像,【.】是使用当前目录的Dockerfile
然后就可以通过docker images查看镜像啦
#####复杂点的
FROM tomcat:latest
##执行删除命令
RUN rm -rf /usr/local/tomcat/webapps/ROOT/*
##复制压缩文件到指定目录
COPY myiot.tar.gz /usr/local/tomcat/webapps/ROOT
##到指定工作目录 ,指定容器初始目录
WORKDIR /usr/local/tomcat/webapps/ROOT
##解压并删除
RUN tar -zxvf myiot.tar.gz\
&& rm -rf myiot.tar.gz
##暴露8080端口
EXPOSE 8080
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dockerfile指令
/*********
*** FROM 选择那个基础镜像文件
*** RUN 构建镜像阶段执行命令
*** ADD <src> <dest> 添加文件,从src目录复制文件到容器的dest,
其中src可以是Dockerfile所在目录的相对路径,
也可以是一个URL,还可以是一个压缩包
*** COPY 拷贝文件,和ADD命令类似,但不支持URL和压缩包
*** CMD(只能出现一次) 容器启动后执行命令
*** EXPOSE 声明容器在运行时对外提供的服务端口,可以声明多次,暴露多个端口
*** WORKDIR 指定容器工作目录,或者跳转到那个目录下
*** ENV 指定环境变量
*** ENTRYPOINT(只能一次) 容器入口,ENTRYPOINT和CMD指令的目的一样,
都是指定Dockerfile容器启动时执行的命令,可多次设置,
但是只有最后一个有效
*** USER 该指令用于设置启动镜像时的用户或者UID,
写在该指令后的RUN、CMD以及ENTRYPOINT
指令都将使用该用户执行命令
*** VOLUME 指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,
该目录可被容器本身使用,也可共享给其他容器,
当容器中的应用有持久化数据的需求可以
在Dockerfile中使用该指令,格式为 : VOLUME["/data"]。
*****/
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
##########################docker-compose
##启动docker-compose
docker-compose up -d
##停止docker-compose
docker-compose down
##配置docker-compose.yml
version: '3.1'
services:
mysql:
restart: always
image: mysql
container_name: mysql
ports:
- 3306:3306
volumes:
- '/home/ljo/work/mysql_db:/var/lib/mysql' ##宿主机上的文件夹要有可写权限
enviroment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
adminer: ###数据库的一个PHP管理web端
image: adminer
restart: always
ports:
- 8081:8080
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080 ##这个后面的8080和上面那个adminer的8080不冲突,因为容器是隔离的
volumes:
- /home/ljo/work/webapps:/usr/local/tomcat/webapps ##宿主机上的文件夹要有可写权限
environment:
TZ: Asia/Shanghai ##时区
######################GiyLab
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh'
restart: always
hostname: ' 192.168.75.145'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG:
external_ur1 'http://192.168.75.145'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_ port'] = 80
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- /home/ljo/work/config:/etc/gitlab
- /home/ljo/work/data:/var/opt/gitlab
- /home/ljo/work/logs:/var/log/gitlab
##################### 下面使用了一个网络my_net使得这两个容器可以相互通信,
##################### ip连接就可以使用容器名称进行了
version: '3.1'
services:
myMQTT:
restart: always
image: golang:latest
container_name: myMQTT
ports:
- 9990:9090
volumes:
- '/home/ljo/work/mqtt:/go/src/'
environment:
TZ: Asia/Shanghai ##时区
networks:
#- default
- my_net
command: go run /go/src/study_one_day/web/webServer.go
mqtt-server:
restart: always
image: mqtt-server:latest
container_name: mqtt-server
# volumes:
# - '/home/ljo/work/mqtt/apollo:/apollo'
ports:
- 61613:61613
- 61614:61614
- 61624:61624
- 61623:61623
- 61680:61680
- 61681:61681
environment:
TZ: Asia/Shanghai ##时区
# command: ./apollo-broker run
networks:
# - default
- my_net
networks:
my_net:
external: true
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64703.html